ruby-on-rails - 没有has_secure_password的身份验证

  显示原文与译文双语对照的内容
0 0

我试图做一个定制的认证,以更好地理解在幕后发生什么。 它花费了一个时间来接受密码和 password_confirmation,但是现在它不工作,我全部都不知道了。


class UsersController <ApplicationController
def new
 @user = User.new
 end

 def create
 par = params[:user]
 @user = User.new(params[:user])
 if @user.verify_password_confirmation(par[:password], par[:password_confirmation]) && @user.save
 sign_in @user
 redirect_to user_url(@user)
 else
 render 'new'
 end
 end
end

attr_accessor中有密码和password_confirmation有危险?


require 'bcrypt'

class User <ActiveRecord::Base
 attr_accessor :password_confirmation, :password
 attr_accessible :name, :email, :password, :password_confirmation

 before_save { email.downcase! }

 validates :name, presence: true, length: { maximum: 50 }
 VALID_EMAIL_REGEX =/A[w+-.]+@[a-zd]-.]+.[a-z]+z/i
 validates :email, presence: true,
 format: { with: VALID_EMAIL_REGEX },
 uniqueness: { case_sensitive: false }
 validates :password, length: { minimum: 6 }

 validates :password_confirmation, presence: true

 def password=(password)
 self.password_digest = BCrypt::Password.create(password)
 end

 def verify_password(password) #for the sessions, which obviously I can't check yet
 BCrypt::Password.new(self.password_digest) == password
 end

 def verify_password_confirmation(pass, pass_con) #couldn't see how else to confirm it
 pass_con == pass
 end

 def reset_session_token!
 self.session_token = SecureRandom::base64(32)
 self.save!

 self.session_token
 end
end

编辑:特别是问题是它在 @user.save 或者 verify_password_confirmation 和re呈现中失败

时间: 原作者:

0 0

查看github上的secure_password.rb 。 其他第三方认证 Gems 或者插件相比,has_secure_password更简单,更清晰,更易于理解。 还要注意,has_secure_password使用 bcrypt gem 来生成 password_digest 。 因此,如果你想滚动你自己的身份验证系统,那么你就需要考虑它的安全性。

原作者:
...