无法获得BCrypt身份验证

时间:2014-08-22 00:41:40

标签: ruby-on-rails basic-authentication bcrypt bcrypt-ruby

我正在尝试设置一个简单的iOS / Rails应用程序,我可以创建一个用户,然后使用BCrypt对它们进行身份验证。我试图遵循BCrypt的说明,但我的身份验证过程无效。对于rails非常新,所以我确定我搞砸了一些简单的东西!

创建新用户:

在users_controller.rb

# POST /users
# POST /users.json
def create
  @user = User.new(user_params)
  @user.password = user_params[:password]

 respond_to do |format|
  if @user.save
    format.html { redirect_to @user, notice: 'User was successfully created.' }
    format.json { render :show, status: :created, location: @user }
  else
    format.html { render :new }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
 end
end

def user_params
    params.require(:user).permit(:username, :password)
end

在user.rb

def password
   @password ||= Password.new(password_hash)
end

def password=(new_password)
   @password = Password.create(new_password)
   self.password_hash = @password
end

在服务器上:

在2014-08-21 19:32:05 -0500开始发布“/users.json”for 192.168.2.6 UsersController处理#create为JSON   参数:{“username”=>“testtest”,“password”=>“[FILTERED]”,“user”=> {“username”=>“testtest”}}    (0.1ms)开始交易   用户存在(20.8ms)SELECT 1 AS一个FROM“users”WHERE“users”。“username”='testtest'LIMIT 1 在string列上为password_hash类型插入的二进制数据   SQL(0.8ms)INSERT INTO“users”(“created_at”,“password_hash”,“updated_at”,“username”)VALUES(?,?,?,?)[[“created_at”,“2014-08-22 00 :32:05.960378“],[”password_hash“,”$ 2a $ 10 $ UzLdD7ytQXKRDU5MhAawJuFQ3R4oQlPyXh / V4GehNP692fsSpK6wK“],[”updated_at“,”2014-08-22 00:32:05.960378“],[”用户名“,”testtest“ ]]    (1.3ms)提交事务   呈现的用户/ show.json.jbuilder(0.3ms) 完成201创建于136ms(浏览次数:31.9ms | ActiveRecord:23.5ms)

验证用户身份:

在sessions_controller.rb

def create
    if @user = User.authenticate(params[:username], params[:password])
        session[:user_id] = @user.id
        render :show
    else
        flash.now[:alert] = "Invalid login/password combination"
        render :action => 'fail'
    end
end

在user.rb

def self.authenticate(username,password)
 @user = User.find_by_username(username)
 return @user.password == password
end

服务器:

*在2014-08-21 19:38:26 -0500开始了192.168.2.6的POST“/ session” 由SessionsController处理#create as /   参数:{“username”=>“testtest”,“password”=>“[FILTERED]”,“session”=> {“username”=>“testtest”,“password”=>“[ FILTERED]“}}   用户负载(0.2ms)SELECT“users”。* FROM“users”WHERE“users”。“username”=“testtest”LIMIT 1   渲染会话/ fail.json.jbuilder(0.2ms) 在105ms完成200 OK(浏览次数:23.3ms | ActiveRecord:0.2ms)*

非常感谢任何见解!

1 个答案:

答案 0 :(得分:1)

基本上Bcrypt用于加密密码。

您可以在user.rb模型中使用以下方法来加密密码并验证用户身份。

before_save :encrypt_password
def self.authenticate(name, password)
  user = find_by_user_name(name)
  if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
    user
  else
    nil
  end
end

def encrypt_password
  if password.present?
    self.password_salt = BCrypt::Engine.generate_salt
    self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
  end
end