2017-12-12 16 views
1

ログインが成功する前に、userstateという属性のチェックをしようとしています(名前&が合格)。 sessions_controler
ユーザモデルRuby on Rails - ログイン前にユーザを確認してください

class User < ApplicationRecord 
    has_secure_password 
end 

移行

class CreateUsers < ActiveRecord::Migration[5.1] 
    def change 
     create_table :users do |t| 
      t.string :name 
      t.string :email 
      t.string :password_digest 
      t.integer :type 
      t.integer :state 

      t.timestamps 
     end 
    end 
end 

セッションを使用してマイsession_controllerアクションを作成する(状態= 0:非アクティブ/ 1:アクティブ)

def create 
    user = User.find_by name: params[:session][:name].downcase 

    if user && user.authenticate(params[:session][:password]) && user.state == 1 
     flash[:success] = "Login successed" 
     log_in user 
     redirect_to user 
    else 
     flash[:danger] = "Login failed" 
     render :new 
    end 
end 

レールルート

get 'login' => 'sessions#new' 
post "login" => "sessions#create" 

user.state == 1の結果はsession_controllerで、常にfalseです。私はチェックのために私が使用したユーザがデータベースにstate 1を持っていると確信しています。
ありがとうございました

+0

同じ名前のユーザーがいないことは確かですか? – s3tjan

+0

'User.where(name:params [:session] [:name] .downcase).count'をチェックしてください。 1より大きい場合は、コントローラロジックを修正してください。 –

答えて

0

コメントを追加するにはポイントがありませんが、Deviseを使用しているかどうか質問したいと思いますか?

あなたがいる場合は、コントローラにフィルタを追加することができます:あなたはまた、フィルターに

before_action :authenticate_user!, only: [:index]

希望を適用するメソッドを指定することができます

before_action :authenticate_user!この

0

Iを支援deviseが提供するようにsession_controllerにcreateの実装を残しておくと良いでしょう。すでにユーザーに検索クエリを行っているときは、sessions_controllerのbefore_actionに入れてください。ユーザーの資格情報を確認する前に、状態を確認する必要があります。私はそれがあなたの役に立てば幸い

before_action :authenticate_user_state, only: [:create] 

private 

def authenticate_user_state 
    user = User.find_by name: params[:session][:name].downcase 

    redirect_to new_user_session_path, alert: 'Login Failed' 
end 

sessions_controllerで

関連する問題