[英]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.