我正在将 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 等)做同样的事情。设计中有类似的东西吗?