ruby - "Remember me"选项 - 我该如何实现它?

标签 ruby authentication sinatra

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

我需要做的是设置“记住我”选项。那么我该如何为我的简单解决方案做到这一点呢?我想不通。

最佳答案

我这样做的方式是这样的(我们使用 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

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

关于ruby - "Remember me"选项 - 我该如何实现它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15160004/

相关文章:

wordpress - 如何在登录wordpress时检查用户状态

java - 单击浏览器的后退按钮注销后在登录页面上重定向

ruby - 顶级方法 : Why they become private instance methods in Object? 为什么不公开?

ruby - 为什么 Array#each 返回具有相同元素的数组?

Ruby Regex 仅捕获最后一个匹配组的值

java - Firebase 登录 - 加载卡住

css - 加载 SASS 样式表时出错

ruby - 根据 Sinatra 环境需要 gem

ruby - 使用 sinatra 在 block 之间传递数据

ruby-on-rails - 对 Rails 工作流实现有何建议?