我在提交注册表单时收到此错误消息: (我跟随railscast#250 http://railscasts.com/episodes/250-authentication-from-scratch)
Mysql2::Error: Column 'password' cannot be null:
INSERT INTO `users` (`activated`, `activation_key`, ... , `email`, `password`, `password_salt`, `telephone`, `updated_at`)
VALUES (0, '9cli91cjwmt1rcahaiyefh05xhwy5hvz', ..., 'name@domain.tld', NULL, '$2a$10$4vc0HksIm17rzKDxcYVQiO', 123456789, '2013-06-27 19:16:54')
**Parameters**
{"utf8"=>"✓",
"authenticity_token"=>"DNEv4SuXt5btf+MTqM1xA6BWeT7JUa3OAf4AITFCe18=",
"user"=>{"email"=>"name@domain.tld",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]",
"telephone"=>"123456789",
"activation_key"=>"9cli91cjwmt1rcahaiyefh05xhwy5hvz"},
"commit"=>"Create User"}
表格
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div class="error_messages">
<h2>Form is invalid</h2>
<ul>
<% for message in @user.errors.full_messages %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :email %><br />
<%= f.text_field :email %>
</p>
<p>
<%= f.label :password %><br />
<%= f.password_field :password %>
...**
我在参数中有密码值FILTERED,因为我使用f.password_field ..因此我在SQL命令中有NULL ..电子邮件中的f.text_field工作..我缺少什么?
与railscast唯一不同的是我在UsersController中有这个但它应该可以工作
def create
params[:user][:activation_key] = Array.new(32){Random.new.rand(36).to_s(36)}.join
@user = User.new(params[:user])
if @user.save
redirect_to root_url, :notice => "Signed up!"
else
render "new"
end
end
谢谢
编辑: 在Debug @ user.inspect中 抛出这个值
#<User id: nil, address_id: nil, company_id: nil, email: "username@domain.tld", password: nil, telephone: 123456789, activation_key: "jolkxv5bd7c2zgq08tkvb7srwe20tfqc", created_at: nil, updated_at: nil, activated: false, password_salt: nil, password_hash: nil>
我评论道 before_save:encrypt_password 现在生成password_hash和password_salt,但密码列仍为NULL :( 我尝试从头开始新的应用程序,它的工作..但我无法解决这个问题?
答案 0 :(得分:0)
我不知道您的应用程序到底出了什么问题,但您所指的Railscast有点过时,因为现在您会使用has_secure_password
。 Railscast有一个修订过的剧集,但只有付费用户才能看到修改后的剧集。
当然,如果没有这种新方法,没有什么能阻止您进行身份验证,我不认为这样做有任何特别的缺点,但是如果您想查看has_secure_password
的工作原理,{ {3}}
答案 1 :(得分:0)
好吧,我明白了,这个railscast不使用密码列!它仅使用:email:string
,password_hash:string
,password_salt:string