Rails、devise、および omniauth を使用して、facebook 経由で登録およびログインしています。私たちは Heroku でホストされ、2 つの Web dyno を実行しています。
facebook でのログインに失敗することがあります。アプリと Facebook の間の実際のハンドシェイクは問題ありません。実際、以下のコードでは、@user は実際の User モデル インスタンスであり、omniauth データ ハッシュには FB からのすべてのデータが含まれており、sign_in は成功したように見え、さらに current_user が設定されています。
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.find_for_facebook(env["omniauth.auth"].extra.raw_info, current_user)
logger.info ">>>>>> OMNIAUTH FB BEGIN >>>>>>"
logger.info env["omniauth.auth"].inspect
logger.info "User is: #{@user.inspect}"
session["devise.facebook_data"] = request.env["omniauth.auth"].except("extra")
flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"
res = sign_in(:user, @user)
logger.info "Sign In Result: #{res.inspect}"
logger.info "CURRENT_USER: #{current_user.inspect}"
logger.info "<<<<<< OMNIAUTH FB END <<<<<<"
respond_to do |format|
format.json
end
end
end
クライアント側は、ログインに成功すると、サイトの別の URL にリダイレクト (ログイン コンテキストに基づくさまざまなアクション) を実行します。その URL で、current_user をチェックしますが、current_user は nil を返します。ログインプロセスを数回繰り返すと、最終的には機能します。
私たちはオンです
- レール3.2
- 考案 2.1.2
- Omniauth-facebook 1.4.0
- ルビー 1.9.3 p194