Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在使用Desive登录/注销时设置Cookie_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 如何在使用Desive登录/注销时设置Cookie

Ruby 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 for rails 3应用程序。对于页面缓存,我需要为登录/注销信息设置cookies


当使用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