繁体   English   中英

Rails Devise-忘记密码要求登录

[英]Rails Devise - Forgot password asking for login

我正在管理系统上的用户,因此它可以是:recoverable。 一切正常,除非单击链接重置密码,然后要求用户登录。 这没有意义,因为它将通过发送到电子邮件的令牌进行重置。 任何人都面临这个问题,您不知道可能是什么原因? 谢谢!

编辑:

好的,这是我的错误:这里有一个before_action authenticate_user! 在我的应用程序控制器上。 如何仅为该重置密码添加例外?

看看你的before action在哪个控制器处理此页面(可能是会话控制器或用户控制)方法。 我的猜测是您可能正在拨打诸如authenticate_user!类的电话authenticate_user! 该链接的操作之前。

您在代码中发现了问题,但我正在回答另一个问题:

如何仅为该重置密码添加例外?

我要更改为:

您应该authenticate_user! ApplicationController

显然,既然我提出了这个问题,答案是否定的。

原因如下:

  1. 没有应用程序始终需要身份验证。 如果您需要登录,则意味着该应用程序始终不需要身份验证。 如果您可以“忘记密码”,则无需一直进行身份验证。 我也犯了同样的错误...
  2. authenticate_user! 不是为ApplicationController设计的,因为ApplicationController是每个控制器。 也就是说,它是为限制对控制器的访问而设计的,是的,但不是专门针对ApplicationController 首先,您必须添加此内容的原因是,例如,仅允许登录用户编辑自己的文章。 您不会有人来编辑文章,但是您确实希望任何人都可以看到文章。 我对您的应用程序一无所知,但通常情况下,身份验证是一个案例,但有非常特殊的例外。

因此,即使您必须粘贴: authenticate_user! 很多次没关系。 还有另一种方法(这就是为什么我要你的routes.rb )。

https://github.com/plataformatec/devise/wiki/How-To:-Define-resource-actions-that-require-authentication-using-routes.rb

PS您的第一个问题的答案:

before_action :authenticate_user!, unless: 'params[:controller] == "devise_passwords"'

要么

before_action :authenticate_user!, unless: 'params[:controller] == "passwords"'

我忘记了此控制器的字符串表示形式。

但是同样,这很糟糕,并且随着您的应用程序的增长而无法很好地扩展

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM