Rails设计 - 忘记密码要求登录

时间:2016-11-23 19:47:39

标签: ruby-on-rails devise

我在我的系统上管理用户,因此它可以是:可恢复的。一切顺利,除非我点击链接重置密码,它会要求用户登录。它没有意义,因为它将通过发送到电子邮件的令牌重置。有人遇到这个问题你知道可能是什么原因吗?谢谢!

编辑:

好吧,弄错了:有一个before_action authenticate_user!在我的应用控制器上。我如何仅为重置密码添加例外?

2 个答案:

答案 0 :(得分:3)

查看您的before action方法,无论哪个控制器处理此页面(可能是会话控制器或用户控制器)。我的猜测是你可能在该链接的操作之前调用authenticate_user!之类的内容。

答案 1 :(得分:1)

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

  

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

我要改为:

  

您应该authenticate_user!ApplicationController吗?

显然,由于我正在解决问题,答案是否定的。

原因如下:

  1. 任何应用都不需要身份验证。如果您需要登录,则表示应用程序始终不需要身份验证。如果您可以"忘记密码",那么您不需要始终进行身份验证。我也犯了同样的错误......
  2. authenticate_user!不适用于ApplicationController,因为ApplicationController是每个控制器。也就是说,它设计用于限制对控制器的访问,是的,但不是ApplicationController具体。您必须首先添加此内容的原因是,例如,只允许登录用户,编辑他们自己的文章。你不会有人编辑文章,但你确实希望任何人看到文章。我对您的应用程序一无所知,但通常情况下,身份验证是一种情况,特别是例外情况。
  3. 所以,即使您必须多次粘贴:authenticate_user!,也没关系。还有另一种方法(这就是我要求你routes.rb)的原因。

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

    P.S。第一个问题的答案:

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

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

    我忘了这个控制器的字符串表示。

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

相关问题