"记住我"选项 - 我该如何实现它?

Ala*_*ano 1 ruby authentication sinatra

我的Sinatra应用程序中有一个简单的身份验证系统.session[:user_id]当用户输入正确的登录名和密码时,它基本上设置为用户的id.这已经足够了,我不会使用其他解决方案.

我需要做的是做出"记住我"的选择.那么我怎样才能为我的简单解决方案做到这一点?我无法弄清楚.

Mar*_*mou 5

我这样做的方式就是这个(我们使用OmniAuth进行身份验证,使用Mongoid进行用户存储 - 登录表单使用AJAX,因此回复是JSON).与"记住我"复选框对应的HTML字段称为"记住":

post '/auth/identity/callback' do
  u = User.find(env['omniauth.auth']['uid'])
  session[:user] = u
  session.options[:expire_after] = 2592000 unless params['remember'].nil? # 30 days
  [200, {:msg => 'User logged in'}.to_json]
end
Run Code Online (Sandbox Code Playgroud)

这里的关键是sessions.options[:expire_after]线.如果未设置:expire_after,则在浏览器退出时将自动删除cookie.设置后,cookie将在浏览器重新启动时保持不变,并保持指定的秒数.