在我的rails 3 app中,我使用Omniauth作为用户身份验证部分(fb / twitter)。
实际上我遵循这个:
https://github.com/RailsApps/rails3-mongoid-omniauth
https://github.com/RailsApps/rails3-mongoid-omniauth/wiki/Tutorial
但是, 当我关闭浏览器会话到期时,我需要再次登录。 如何为回访用户保留会话?
非常感谢任何帮助!
答案 0 :(得分:9)
您想要的并不困难,您只需在创建会话时设置永久性cookie,然后在设置当前用户时检索此值。
在ApplicationController
中,只需将current_user
方法更改为:
def current_user
return unless cookies.signed[:permanent_user_id] || session[:user_id]
begin
@current_user ||= User.find(cookies.signed[:permanent_user_id] || session[:user_id])
rescue Mongoid::Errors::DocumentNotFound
nil
end
end
在您的SessionsController
中,修改您的create
以设置Cookie,如果用户想要:
def create
auth = request.env["omniauth.auth"]
user = User.where(:provider => auth['provider'],
:uid => auth['uid']).first || User.create_with_omniauth(auth)
session[:user_id] = user.id
cookies.permanent.signed[:permanent_user_id] = user.id if user.really_wants_to_be_permanently_remembered
redirect_to root_url, :notice => "Signed in!"
end
答案 1 :(得分:4)
Devise通过其Rememberable模块提供此功能。 OmniAuth通过(你永远不会猜到)OmniAuth模块轻松地与它集成。它甚至在您发布的第二个链接中提到过!
答案 2 :(得分:1)
请确保您的rails应用程序遵循的Cookie政策确实具有针对您的用例的合理设置(请参阅上面评论中的链接)。我现在所能想到的(知道我所知道的,坐在我坐的地方)就是那些在你的环境中不是最理想/不可取的cookie(s / ve)属性。
请检查浏览器调试/开发工具中的cookie设置,例如firebug,firecookie或chrome开发工具。
对不起,鉴于我对这个问题的了解,这就是我所能想到的。请随时与我联系,详细了解您的cookie和测试设置。
My 2Cents。
答案 3 :(得分:0)
这对我来说是这样的:
def google_oauth2
@user = User.from_google(google_params)
if @user.persisted?
@user.remember_me = true
sign_in @user
........
end
end