【发布时间】: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