1

私はomniauthとdeviseを使用して、ユーザーのFacebookアカウントでログインしていますが、すべてが機能しますが、ハッシュからユーザーの電子メールを取得しようとすると、次のエラーが発生します。

NoMethodError in AuthenticationsController#create
undefined method `id' for "/":String

エラーの完全なログは次のとおりです:http://pastie.org/1698569

エラーがなくなり、更新後に正常にログインできるようになります。

編集:私の認証コントローラーの22行目であることがわかりました

     sign_in_and_redirect_to(:user, root_path) 

このメソッドを実行した後、何らかの理由で:userにサインインできません

 def apply_facebook(omniauth)                    
   if (extra = omniauth['extra']['user_hash'] rescue false)  
   self.email = (extra['email'] rescue '')
 end
end

ただし、そのメソッドを実行しない場合は、sign_in_and_redirect_toで問題なく実行できます。

これが私のコントローラー/モデルですhttp://pastie.org/1698453

本当に助けてくれてありがとう

4

1 に答える 1

1

root_pathの2番目のパラメータとして使用することはできませんsign_in_and_redirect。これを使用できるいくつかの利用可能な方法があります:

sign_in_and_redirect :user, @user                      # sign_in(scope, resource)
sign_in_and_redirect @user                             # sign_in(resource)
sign_in_and_redirect @user, :event => :authentication  # sign_in(resource, options)
sign_in_and_redirect @user, :bypass => true            # sign_in(resource, options)

2番目のパラメーターはリソースでもオプションでもない(文字列である)ため、エラーが発生します。次のように変更する必要があります。

sign_in_and_redirect(:user, user) # based on your pastie

サインイン後にリターンパスをカスタマイズして、別のURLに移動するように強制する場合は、ApplicationControllerで次のように実行できます。

def after_sign_in_path_for(resource)
  "/go/to/this/path"
end
于 2011-03-23T18:48:43.953 に答える