rva*_*ort 5 ruby-on-rails heroku devise omniauth
我们通过facebook使用rails,devise和omniauth进行注册和登录.我们在Heroku上托管,运行两个web dynos.
有时用facebook登录失败.我们的应用程序和Facebook之间的实际握手很好.实际上,在下面的代码中@user是一个实际的User模型实例,omniauth数据Hash包含来自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
Run Code Online (Sandbox Code Playgroud)
成功登录后,客户端会对我们网站上的另一个URL进行重定向(基于登录上下文的不同操作).在该URL,我们检查current_user ...但current_user返回nil.如果登录过程重复几次,最终会起作用.
我们在
pcc*_*mie -2
我不知道这是否真的是您所描述的解决方案,但我想知道这是否:
@user = User.find_for_facebook(env["omniauth.auth"].extra.raw_info, current_user)
应该读成这样?
@user = User.find_for_facebook(request.env["omniauth.auth"].extra.raw_info, current_user)
反正我的就是这样。不过,不太确定这可以解释为什么您的应用程序任意让用户登录。