我最近将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
谢谢!
答案 0 :(得分:0)
发现问题:我安装了bcrypt gem,但没有安装bcrypt-ruby。