1

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

我需要做的是做出“记住我”的选项。那么我怎样才能为我的简单解决方案做到这一点呢?我想不通。

4

2 回答 2

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

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

于 2013-04-25T14:59:31.937 回答
0

为此,您可以利用 Sinatra Cookie。也许检查“remember_me”参数并将用户 ID 分配给 cookie(如果存在)。例如,这是一个 Rails 示例,但含义是相同的:

def login_user
    begin
      @user = User.authenticate(params)
      if @user
        if params[:remeberme] 
          cookies.permanent[:user_id] =  @user.id.to_s
        else
          cookies[:user_id] = @user.id.to_s
        end
      end
    rescue Exception => e
      @errors = [e]
    end
  end

西纳特拉饼干

于 2013-03-01T14:33:23.607 回答