我試圖完全覆蓋Devise的錯誤消息'reset_password_token is invalid'
。我希望它能讀取"password reset link has already been used."
我該怎麼做?在devise.en.yml
中沒有看到這個字段或關鍵字。設計如何更改reset_password_token錯誤
5
A
回答
2
Reset password token is invalid
消息是在更新密碼時引發的驗證錯誤,而不是設計特定錯誤(其中消息存儲在devise.en.yml中)。
此驗證發生在devise/passwords_controller#update方法中。 代碼包括下面:
# PUT /resource/password
def update
self.resource = resource_class.reset_password_by_token(resource_params)
yield resource if block_given?
if resource.errors.empty?
resource.unlock_access! if unlockable?(resource)
flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
set_flash_message(:notice, flash_message) if is_flashing_format?
sign_in(resource_name, resource)
respond_with resource, location: after_resetting_password_path_for(resource)
else
respond_with resource
end
end
的self.resource = resource_class.reset_password_by_token(resource_params)
線設置與向reset_password_token是無效相關的錯誤消息resource.errors
對象。
此行之後檢查的resource.errors
值將顯示一個大哈希與... @messages={:reset_password_token=>["is invalid"]}
的devise_error_messages
method重新格式化這個結尾說的「重設密碼令牌是無效的」。
要更改此消息,應該自定義密碼控制器,並且update
方法更改爲具有不同的錯誤消息哈希。
步驟將如下所示:
1)自定義路線密碼控制器
# config/routes.rb
devise_for :users, :controllers => { :passwords => "passwords" }
2)創建的自定義密碼控制器
# app/controllers/passwords_controller.rb
class PasswordsController < Devise::PasswordsController
end
3)自定義更新方法更改錯誤信息:
# app/controllers/passwords_controller.rb
# Include the update method as it is fully, with the following changes in the else block:
def update
...
if resource.errors.empty?
...
else
if resource.errors.messages[:reset_password_token]
resource.errors.messages.delete(:reset_password_token)
resource.errors.messages[:password_reset_link] = ["has already been used"]
end
respond_with resource
end
1
甲不是覆蓋passwords_controller簡單的解決方案,是簡單地修改視圖:
在應用程序/視圖/設計/口令/ edit.html.haml(或ERB當量), 只是把這個條件在窗體中:
- if resource.errors[:reset_password_token].present?
.alert.alert-danger
This password reset URL has expired. You may have requested to reset your password more than once. Follow the link in the most recent email or
= link_to 'request to reset your password again.', new_user_password_path
而且你可能想要刪除這兩行:
= f.error_notification
= f.full_error :reset_password_token
相關問題
- 1. 更改設計錯誤
- 2. 設計得到用戶通過reset_password_token
- 3. 如何在密碼更改時覆蓋設計錯誤消息
- 4. 如何更改重定向的設計
- 5. 如何更改UIBarButtonItem按鈕設計?
- 6. 如何更改jquery Flexslider箭頭設計?
- 7. 如何更改菜單條的設計?
- 8. vb.net中的設計更改時出錯
- 9. 訪問 - 設計更改錯誤消息,而不嘗試進行更改
- 10. 更改PIN設計
- 11. 在自定義電子郵件中發送unhashed設計reset_password_token
- 12. 設計(通過API)可恢復:reset_password_token不能爲空
- 13. 爲什麼設計不要hash reset_password_token和confirmation_token?
- 14. Rails的設計reset_password_token不斷得到標記爲「已過期」
- 15. 在更改UI設計時拋出錯誤
- 16. 將通知中的設計閃光消息更改爲錯誤
- 17. Rails 3 /設計 - 更改密碼重置的錯誤消息
- 18. 如何解決SQLite設計錯誤
- 19. 如何顯示設計表單錯誤
- 20. 設計,用戶#遠程更新=>真,如何傳回錯誤?
- 21. 設計時錯誤
- 22. 錯誤由設計?
- 23. ALU設計錯誤
- 24. 設計RSpec錯誤
- 25. 設計Omniauth錯誤
- 26. 錯誤而設立設計
- 27. 我如何更改錯誤信息?
- 28. asp.net如何更改錯誤響應?
- 29. 如何codeigneiter更改URI錯誤信息
- 30. 如何更改nginx錯誤頁面?