我是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
答案 0 :(得分:3)
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
。
答案 1 :(得分:2)
要更改注册页面的路线,您只需更改路线:
# 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
我建议您回滚并更仔细地遵循安装步骤。然后添加一些集成测试以确保其正常工作。不要试图重新发明轮子。
之后,您可以尝试customizing it。