gpt4 book ai didi

ruby-on-rails - rails 5 : Devise Gem password Encryption

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:41 25 4
gpt4 key购买 nike

我是 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:设计为此使用了两个属性:passwordpassword_confirmation

关于ruby-on-rails - rails 5 : Devise Gem password Encryption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com