簡體   English   中英

自定義密碼恢復設備

[英]Custom password recovery Devise

我正在處理帶有可選電子郵件屬性的Devise用戶模型(他可以使用文檔編號或電子郵件登錄)。 由於管理員可以注冊新用戶(設置他的密碼),所以我想知道是否有一種方法可以讓用戶使用文檔編號和生日來恢復其設計密碼,然后注冊一個新密碼。

希望那是清楚的。 謝謝。

好吧,如果此人已登錄,您可以(在用戶上)調用此模型中的相關方法來恢復密碼。 我猜您需要創建一個視圖,然后根據控制器中的這些值來驗證重置密碼的請求,然后根據current_user調用正確的方法。 我的猜測是您需要此文件中send_reset_password_instructions方法。

一個簡單的視圖形式應該可以做到; 如果值匹配(即,如果您能夠根據POST的文檔編號和生日與從數據庫調用的User的期望值進行比較來驗證User),則調用該方法並發送重置電子郵件。

如果您沒有該用戶的電子郵件地址(我懷疑可能是您的問題),那么可以(在控制器中)而不是調用上述方法來發送電子郵件,而可以調用reset_password! 方法,以其形式輸入新的所需密碼,然后進行更改。

編輯: 此鏈接也可能有一定用處。

我的解決方案基於@Alex答案。 我做了一個自定義的密碼重置視圖。

處理設計模型上的密碼要求時,有兩個(或更多)選項:

首先,我們可以覆蓋設計密碼要求方法。 這將保存沒有密碼的模型對象:

def email_required?
  false
end

或者我們可以在創建對象后設置一個簡單的令牌:

if athlete.new_record?
  generated_password = Devise.friendly_token[0,20]
  athlete.password = generated_password
  athlete.password_confirmation = generated_password
  athlete.skip_confirmation!
end

(可選)將上述行為放在模型上:

  def reset_password!(new_password, new_password_confirmation)
    self.password = new_password
    self.password_confirmation = new_password_confirmation
    save
  end

簡而言之,這就是解決方案,包括查看生日,密碼和密碼確認的視圖,驗證控制器上的數據並覆蓋密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM