当浏览器关闭时,Omniauth会话到期

时间:2012-02-06 22:41:46

标签: ruby-on-rails session login omniauth

在我的rails 3 app中,我使用Omniauth作为用户身份验证部分(fb / twitter)。

实际上我遵循这个:

https://github.com/RailsApps/rails3-mongoid-omniauth

https://github.com/RailsApps/rails3-mongoid-omniauth/wiki/Tutorial

但是, 当我关闭浏览器会话到期时,我需要再次登录。 如何为回访用户保留会话?

非常感谢任何帮助!

4 个答案:

答案 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

There is another way to do it