我是 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
这是我在我的 Controller 中使用的代码。
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
中放置/取消注释以设计使用密码加密。
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
。
关于ruby-on-rails - rails 5 : Devise Gem password Encryption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097169/