" BCrypt ::错误:: InvalidHash"加入用户组时

时间:2014-08-28 15:28:56

标签: ruby-on-rails authentication passwords bcrypt

我最近将has_secure_password添加到我正在构建的应用的用户组模型中。我使用表单允许用户加入组,如果他们传递有效的组名和密码,则应允许他们加入。但是,看起来密码(用户组表中的password_digest列)没有被加密,因为我在rails控制台中运行authenticate命令时可以看到密码文本,这似乎是抛出这个错误。

用户组模型:

class UserGroup < ActiveRecord::Base

has_many :user_group_items
has_many :users
has_many :items, through: :user_group_items

has_secure_password
validates :password, :presence => true

validates :group_name, :presence => true, :uniqueness => true

形式:

<div class="container">
<h3>Join a group</h3>
<br>
<div class="col-md-4">
    <%= simple_form_for @group, :url => "/user_groups/", :method => :put do |f| %>
    <%= f.error_notification %>
    <div class="form-inputs">
        <%= f.input :group_name, :maxlength => 15 %>
        <%= f.input :password, :maxlength => 15 %>
        <br>
        <div class="form-actions">
            <%= f.button :submit, :class => "btn btn-primary", :value => "Join Group" %>
        </div>
    </div>
</div>
</div>
<% end %>

控制器方法:

def update
    group_name = params[:id] || params[:user_group][:group_name]
    @user_group = UserGroup.find_by_group_name(group_name)
    if @user_group && @user_group.authenticate(params[:user_group][:password])
        current_user.update(:user_group => @user_group)
        redirect_to '/user_groups', :notice => "You have joined #{@user_group.group_name}"
    else
        redirect_to '/user_groups', :notice => "Error, couldn't join #{group_name}. Invalid group name or password"
    end
end

谢谢!

1 个答案:

答案 0 :(得分:0)

发现问题:我安装了bcrypt gem,但没有安装bcrypt-ruby。