我关注了Ryan's cast on signing in with omniauth-facebook,登录效果很好。
然而,我遇到的问题是保持登录状态。现在,在关闭浏览器窗口之前,我一直处于登录状态。如果我再次打开浏览器并返回到我的网站,我就会注销。在其他机器和其他Facebook账户上的其他人也是如此。
我不太熟悉会话和Facebook身份验证的工作原理,所以我很难分析到底出了什么问题。
也许你们中的一些人知道发生了什么?提前感谢!
我的代码:
application_controller:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_usersessions_controller:
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to root_url
enduser.rb:
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.email = auth.info.email
user.pic_url = auth.info.image
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
endomniauth.rb:
OmniAuth.config.logger = Rails.logger
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, CONFIG[:facebook_app_id], CONFIG[:facebook_app_secret], scope 'email', display: 'popup'
end发布于 2013-07-15 22:14:17
It's straight in the Devise wiki
在SessionsController do中注册
remember_me(user)并确保在用户模型中将:rememberable作为Devise选项传递。
附注-我认为你使用的是相当过时的流程,现在鼓励的解决方案是有OmniauthCallbacksController我认为。
发布于 2013-07-15 17:44:16
这里可能出现的问题是,当您关闭浏览器时,会话将过期。
为什么你不能使用devise gem来给用户签名。
如果你为你的用户表使用了devise gem,你会得到一个叫做"Remeber“的选项,当用户登录时,你可以将这个标志设置为true。
有关devise的详细信息,请参阅- https://github.com/plataformatec/devise
这可能会解决你的问题。
https://stackoverflow.com/questions/17649938
复制相似问题