簡體   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