簡體   English   中英

Rails中的密碼加密

[英]Password encryption in Rails

我有用戶模型,並在上面使用了Devise gem。 在我的應用程序中,我有一個管理員用戶,可以注冊其他用戶(例如:客戶端)。 然后,這些用戶可以使用隨機生成的密碼自行登錄。 (但是沒有人可以自己注冊,只有管理員可以注冊用戶。)

當我從其他登錄用戶創建用戶時,即admin用戶創建了另一個用戶,我想生成一些隨機密碼,對其進行加密,然后保存到數據庫中。

如何加密密碼,以便它可以與Devise授權一起使用。 我想我必須使用與Devise相同的方法?

我想要這樣的東西:編輯:

 def create @user = User.new(user_params) # set @user.password to some random encrypted password @user.save end 
因此,每個創建的用戶都將獲得一些隨機密碼。

我之所以這樣問,是因為我認為,如果我的加密/解密不符合devise的使用方式,則用戶將無法使用其密碼登錄,因為當他們登錄時,輸入內容是通過devise的加密方式進行加密的。

如果您正在使用Devise並啟用了:database_authenticable ,則根本不需要您描述的內容。

Devise保存到數據庫時會自動加密,讀回時不會解密, 但是當您將其存儲在password字段中時,它可以是純文本,Devise 僅在編寫時才會為您處理(因此將save純文本,直到您save )。

因此,在控制器中創建新用戶時,您只需執行以下操作:

def create
  # I assume your form will pass a `params[:password]` in plain text too
  @user = User.new(user_params)
  @user.password_confirmation = params[:password]
  @user.save
end

這足以滿足您的目的,無需匹配設備加密

更新1:

此外,要生成隨機密碼,您可以執行以下操作:

require 'securerandom'

def create
  # I assume your form will pass a `params[:password]` in plain text too
  @password = SecureRandom.hex(16)
  @user = User.new(user_params.to_h.merge(password: @password, password_confirmation: @password))
  @user.save
  # Remember to display `@password` in some way to the user
end

您應該擁有:database_authenticatable作為User模型中的devise模塊之一。

Devise上

可驗證數據庫:在登錄時將密碼加密並存儲在數據庫中,以驗證用戶的真實性。可以通過POST請求或HTTP基本身份驗證來完成身份驗證。

暫無
暫無

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

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