2016-12-11 5 views
0

私はrails5でdeviseを使用してログイン用のメールアドレスを確認しています。私は確認リンクをクリックするまですべてうまくいきます。ruby​​ in rubes devyでメールを確認中にエラーが発生しました

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :confirmable 
attr_accessor :signin 

validates :username, :uniqueness => {:case_sensitive => false} 

def self.find_first_by_auth_conditions(warden_conditions) 
    conditions = warden_conditions.dup 
     where(conditions).where(["lower(username) = :value OR lower(email) 
      = :value", { :value => signin.downcase }]).first 
end 

ことができますいくつか:これは上記のコードは次のグループのものというのが私のモデルである

 conditions = warden_conditions.dup 
     where(conditions).where(["lower(username) = :value OR lower(email) 
      = :value", { :value => signin.downcase }]).first 

end 

:これはエラーの原因コードがある

NameError in Devise::ConfirmationsController#show

undefined local variable or method `signin' for #< Class:0x007fb1cbe56b48>

:それは私にこのエラーが表示さ私はそれについて私を助けますか?あなたが私にこの方法の仕組みに関する情報を与えたら?

+0

一見、私はサインインattr_accessorと関係があると言います。あなたはそれで何をしていますか? –

+0

これを使ってサインインしてください – Shahryar

+0

長い間生きていないため、attr_accessorではなくヘルパーメソッドを使用してサインインする方がよいでしょう。 –

答えて

0

まず最初に、attr_accessorは、インスタンスメソッドではなく、クラスメソッドを定義するので、あなたはself.find_first_by_auth_conditionsのようなクラスメソッドの内部でsigninを呼び出す場合undefined local variable or method 'signin' for #< Class:0x007fb1cbe56b48>エラーことを投げるために起こっています。

第2に、find_for_database_authenticationメソッドが不完全です。すでにベースとしてその一例を使用した場合

def self.find_for_database_authentication(warden_conditions) 
    conditions = warden_conditions.dup 
    if login = conditions.delete(:login) 
    where(conditions.to_h).where([ 
     "lower(username) = :value OR lower(email) = :value", 
     { :value => login.downcase } 
    ]).first 
    elsif conditions.has_key?(:username) || conditions.has_key?(:email) 
    where(conditions.to_h).first 
    end 
end 

私はわからないんだけど、あなたはそれを修正するためにあなたの理由は何であったかを説明している場合、それは素晴らしいことだ:あなたはthis exampleに係る基地すべきです。私には理由はないので、そのコードを使用してください。

+0

これが機能しました。私が使用したコードは、私はそれについて混乱していると少し古いですthats、と私はまだ私がそれを変更することができなかった理由だと思うレールの初心者ですdevineについての本からです私自身。助けてくれてありがとう。 – Shahryar

0

ここにあなたのコメントに投稿します。私はあなたがサインイン扱う方法を知らないが、私はそれをやった方法は、セッションコントローラーとセッションヘルパーにあった:

#Session Controller 

def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:email].downcase) 
     log_in user 
     redirect_back_or user 
     flash[:success] = "You are logged in" 
    else 
     flash[:danger] = "Wrong email or password" 
     render 'new' 
    end 
    end 

「log_in(利用者)」私が使用した方法は、セッションヘルパーで定義されています。

#Session Helper 

    def log_in(user) 
    session[:user_id] = user.id 
    end 
+0

これは私が探しているものではありません。私はログインするためにdeviseを使用しています。 – Shahryar

+0

あなたができることのアイデアがあります。 –

関連する問題