[英]Rails 5 : Devise Gem password Encryption
我是Rails初學者。 我正在嘗試使用Devise gem保存密碼。 不知何故,我看到使用Bcrypt
一個問題,根據我的建議,我選擇了Devise。
當我安裝Devise並嘗試保存密碼時,它被保存為簡單的簡單文本。 這是我正在使用的代碼。
config.rb
Rails.application.routes.draw do
devise_for :users #This got added as part of Devise gem usage
#.... Other different routes
resources :users, except: [:new] # I am using users controller and generating routes except for new(Sign_up)
get '/signup', to: 'users#new', as: 'signup' #This is route i wanted for signup
end
這是我在控制器中使用的代碼。
class UsersController < ApplicationController
def new
@user=User.new
end
def create
@user=User.new(user_params)
#@user=User.new(:password => @user.password).encrypted_password
if @user.save
flash[:success]="User "+@user.user_name+" created successfully"
redirect_to users_path
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:user_name,:password,:admin)
end
end
這是我在DB中看到的。
User Load (4.0ms) SELECT "users".* FROM "users" LIMIT $1 [["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<User id: 3, user_name: "admin", password: "admin", admin: "1", created_at: "2018-03-03 08:52:19", updated_at: "2018-03-03 08:52:19", sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil>, #<User id: 4, user_name: "admin2", password: "admin", admin: "1", created_at: "2018-03-03 08:52:36", updated_at: "2018-03-03 08:52:36", sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil>]>
我真的很想知道密碼加密的邏輯連接在哪里。 作為Rails的新手,我無法理解這是如何起作用的。
即使我可以看到last_sign_up
,而ip字段也是零。 Bcrypt
自動完成。
我已經完成了Stackoverflow的一些解決方案,但無法將它們與我的問題聯系起來。
這是我的用戶模型:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
#devise :database_authenticatable, :registerable,
# :recoverable, :rememberable, :trackable, :validatable
#has_secure_password
validates :password, presence: true
validates :user_name, presence: true, uniqueness: true
end
Abdul,只需在您的模型中添加/取消注釋devise :database_authenticatable
to Devise use password encryption。
class User < ApplicationRecord
devise :database_authenticatable
#has_secure_password
validates :password, presence: true
validates :user_name, presence: true, uniqueness: true
end
PS:設計使用兩個屬性: password
和password_confirmation
。
要更改注冊頁面的路由,您只需要更改路由:
# top level of your routes.rb
Rails.application.routes.draw do
devise_scope :user do
# custom path to sign_up/registration
get "/signup" => "devise/registrations#new", as: "new_user_registration"
end
# Below for all other routes:
devise_for :users
end
您無需創建自己的控制器來處理注冊。 你也不應該掌握自己的技能水平,因為在Devise中有很多事情要做,例如簽約用戶。
您還省略了將Devise模塊添加到您的用戶模型中,該模型添加了加密密碼的回調以及其他內容:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
我建議您回滾並更仔細地遵循安裝步驟。 然后添加一些集成測試以確保其正常工作。 不要試圖重新發明輪子。
之后,您可以嘗試自定義它 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.