0

我正在将 Rails 2 应用程序升级到 Rails 3,过去,它使用 AuthenticatedSystems 使用 cookie[:auth_token] 登录:

def logged_in?
  current_user != :false
end

def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie || :false)
        if @current_user != :false && @current_user.logged_in_by_password == true
            session[:logged_in_by_password] = true
        end
        @current_user
end

def login_from_cookie
  user = cookies[:auth_token] && User.find_by_remember_token(cookies[:auth_token])
  if user && user.remember_token?
    user.remember_me
    cookies[:auth_token] = { :value => user.remember_token, :expires => user.remember_token_expires_at, :http_only => true }
    self.current_user = user
  end
end

所以我所要做的就是在#create 上将它添加到我的会话控制器中:

def create
  ...
  cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at, :http_only => true }
end

我现在正在使用设计,我认为它使用会话来登录。但是,我希望它在会话不存在时使用 cookie。这样当用户关闭他/她的浏览器并重新打开它时,rails 应用程序仍然可以自动登录(我的购物车需要这个功能)。

我尝试cookies[:auth_token] = ...在我的 new 中添加该行SesssionsController < Devise::SessionsController,但我不知道如何让 Devise 在那里尝试不同的方法(查看会话、cookie 等)做同样的事情。设计中有类似的东西吗?

4

1 回答 1

0

Devisesession通过 Warden 的支持使用哈希来存储其认证信息。然而,请记住,会话信息通常存储在 cookie中,因此如果您正在寻找用户会话的持久性,则不必担心这一点。

于 2013-09-10T20:29:44.513 回答