我正在尝试在新的 Padrino 0.11 管理界面中实现“记住我”功能,但由于它与 Rails 之间的差异而遇到了一些麻烦。基本上,我正在关注http://railscasts.com/episodes/274-remember-me-reset-password。
我已经设法让 Remember Me 和 auth_token 轻松工作,当我去查看它时,我可以在开发控制台中看到 cookie。我在弄清楚如何让应用程序在 cookie 存在时对它进行自动登录时遇到了很多麻烦。我敢肯定这很愚蠢,但这就是我要做的。
例如,我已经通过会话控制器中的 this 在 Chrome 的开发控制台中创建了一个实际的记住我创建 auth_token 并将其设置为 cookie(我可以在 localhost 上看到)。
管理员/控制器/会话
post :create do
if account = Account.authenticate(params[:email], params[:password])
set_current_account(account)
if params[:remember_me]
response.set_cookie('da_app', value: account.auth_token,
expires: (Time.now + 1.year + 1.day))
end
flash[:success] = "You've successfully logged in as #{account.name}."
redirect url(:base, :index)
else
params[:email], params[:password] = h(params[:email]), h(params[:password])
flash[:error] = pat('login.error')
redirect url(:sessions, :new)
end
end
但是,由于我对 padrino 的经验不足,对于我将在传入请求之前触发、检查 cookie 然后将用户登录的逻辑放置在哪里有点难过。我尝试了以下方法,这并不完美但这绝对是行不通的(尽管不确定为什么... =< ),事实上,检测 cookie 的代码块甚至似乎都没有被触发(这看起来很基本。)。
admin/app.rb (不确定这实际上是正确的地方)
before '/*' do
if request.cookies['da_app'].exists?
set_current_account(Account.find_by_auth_token(request.cookies['da_app']))
redirect url(:base, :index)
end
end
所以,我敢肯定它可能很容易解决,但在这个问题上有点难过(而且,我现在真的试图避免使用像 padrino-warden 之类的 gem 插件,并从头开始实现它作为练习.)。
(此外,帮助解决这个问题的额外业力点,因为我正在实施这个作为全球保护慈善机构的一些无偿工作的一部分。)