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

Lam*_*amp 7 session login ruby-on-rails omniauth

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

其实我遵循这个:

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

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

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

任何帮助将不胜感激!

Dav*_*vid 9

您想要的并不困难,您只需在创建会话时设置永久cookie,然后在设置当前用户时检索此值.

在您ApplicationControllercurrent_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
Run Code Online (Sandbox Code Playgroud)

如果用户想要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
Run Code Online (Sandbox Code Playgroud)


and*_*ell 4

Devise通过其 Rememberable 模块提供此功能。OmniAuth 通过(您永远猜不到的)OmniAuth 模块轻松与其集成。甚至在您发布的第二个链接中也提到了!