【问题标题】:"BCrypt::Errors::InvalidHash" when joining a User Group加入用户组时出现“BCrypt::Errors::InvalidHash”
【发布时间】:2014-08-28 15:28:56
【问题描述】:

我最近将 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

谢谢!

【问题讨论】:

  • 不幸的是,它没有这样做,它只会导致另一个错误:未定义的方法 `[]' for nil:NilClass。
  • 请发布您的development.log 是否得到了您输入的密码或从params 获得的密码
  • UserGroupsController 处理#update as HTML 08:44:01 web.1 |参数:{"utf8"=>"✓", "authenticity_token"=>"rfVoEu193Y128DmoODaLqiy8qXQ9RXsc3udf2++Sz7s=", "user_group"=>{"group_name"=>"Team lol", "password"=>"[过滤] "}, "commit"=>"加入群组"} 08:44:01 web.1 |用户组负载(0.6 毫秒)选择“user_groups”。* FROM “user_groups” WHERE “user_groups”。“group_name”='Team lol' LIMIT 1 08:44:01 web.1 |在 3 毫秒内完成 500 内部服务器错误 08:44:01 web.1 | BCrypt::Errors::InvalidHash(无效哈希):08:44:01 web.1 | app/controllers/user_groups_controller.rb:23:in `update'
  • 检查您的用户“password_digest”列。如果它是“nil”那么你会得到这个错误

标签: ruby-on-rails authentication passwords bcrypt


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2016-02-04
    • 2017-10-28
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多