Ruby on rails 如何在使用Desive登录/注销时设置Cookie
我正在使用Desive for rails 3应用程序。对于页面缓存,我需要为登录/注销信息设置cookiesRuby on rails 如何在使用Desive登录/注销时设置Cookie,ruby-on-rails,devise,Ruby On Rails,Devise,我正在使用Desive for rails 3应用程序。对于页面缓存,我需要为登录/注销信息设置cookies 当使用Desive登录/注销时,设置cookie的最简单方法是什么?我阅读了“如何自定义控制器”部分,但这似乎是一项艰巨的工作。实际上,扩展Desive SessionController以在登录和注销时添加Cookie并不难,您可以创建类似于以下内容的控制器: # app/controllers/sessions_controller.rb class SessionsControl
当使用Desive登录/注销时,设置cookie的最简单方法是什么?我阅读了“如何自定义控制器”部分,但这似乎是一项艰巨的工作。实际上,扩展Desive SessionController以在登录和注销时添加Cookie并不难,您可以创建类似于以下内容的控制器:
# app/controllers/sessions_controller.rb
class SessionsController < Devise::SessionsController
# POST /resource/sign_in
def create
cookies[:sign_in] = "Sign in info you want to store"
super
end
# GET /resource/sign_out
def destroy
cookies[:sign_out] = "Sign out info you want to store"
super
end
end
这应该能让你在大部分的过程中达到目的。由于Deave是基于Warden的,另一个解决方案是使用Warden的回调,例如在你的Deave.rb中:
Warden::Manager.after_set_user do |user,auth,opts|
auth.cookies[:signed_in] = 1
end
Warden::Manager.before_logout do |user,auth,opts|
auth.cookies.delete :signed_in
end
改编自@karl rosaen answer此解决方案创建一个新的初始值设定项或添加到designe.rb初始值设定项的末尾 如果设置了“记住我”选项,这将添加cookie以记住电子邮件,否则将删除cookie
Warden::Manager.after_authentication do |user, auth, opts|
if user.remember_me
auth.cookies[:email] = {value: user.email, expires: 2.weeks.from_now}
else
auth.cookies.delete :email
end
end
您可以使用中的解决方案来使用原始视图。iframe中未设置Cookie。登录后,它会在
Ecwid
embedded application中的登录页面上重定向我。您在超级用户之前设置了cookie-用户是否最终未通过身份验证(例如,密码错误)?谢谢你用一种很好的方式为控制中的签名\u设置cookie。我尝试了SessionController,正如在接受的答案中所述,它也起了作用,但在用户使用“忘记密码”方法重置密码后,它没有立即设置cookie。使用典狱长的回调功能,效果如预期@karlrosaen ~auth.cookies
不再支持auth.cookies,现在auth.cookies不可用了,应该用什么?@xiaopang对不起,我也有一段时间没用了,所以我不知道。这个方法仍然有效。我不知道他们是否把它加了回去,但是@roland在这里是不正确的。auth.cookies仍然可用。
Warden::Manager.after_authentication do |user, auth, opts|
if user.remember_me
auth.cookies[:email] = {value: user.email, expires: 2.weeks.from_now}
else
auth.cookies.delete :email
end
end