我在我的系统上管理用户,因此它可以是:可恢复的。一切顺利,除非我点击链接重置密码,它会要求用户登录。它没有意义,因为它将通过发送到电子邮件的令牌重置。有人遇到这个问题你知道可能是什么原因吗?谢谢!
编辑:
好吧,弄错了:有一个before_action authenticate_user!在我的应用控制器上。我如何仅为重置密码添加例外?
答案 0 :(得分:3)
查看您的before action
方法,无论哪个控制器处理此页面(可能是会话控制器或用户控制器)。我的猜测是你可能在该链接的操作之前调用authenticate_user!
之类的内容。
答案 1 :(得分:1)
您发现代码存在问题,但我正在回答您的另一个问题:
我如何仅为重置密码添加例外?
我要改为:
您应该
authenticate_user!
内ApplicationController
吗?
显然,由于我正在解决问题,答案是否定的。
原因如下:
authenticate_user!
不适用于ApplicationController
,因为ApplicationController
是每个控制器。也就是说,它设计用于限制对控制器的访问,是的,但不是ApplicationController
具体。您必须首先添加此内容的原因是,例如,只允许登录用户,编辑他们自己的文章。你不会有人编辑文章,但你确实希望任何人看到文章。我对您的应用程序一无所知,但通常情况下,身份验证是一种情况,特别是例外情况。所以,即使您必须多次粘贴:authenticate_user!
,也没关系。还有另一种方法(这就是我要求你routes.rb
)的原因。
P.S。第一个问题的答案:
before_action :authenticate_user!, unless: 'params[:controller] == "devise_passwords"'
或
before_action :authenticate_user!, unless: 'params[:controller] == "passwords"'
我忘了这个控制器的字符串表示。
但同样,这很糟糕,并且随着应用程序的增长而无法很好地扩展