0

サインアップフォームを送信すると、このエラーメッセージが表示されます: (レールキャスト #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 %>
    ...**

f.password_field ..を使用しているため、パラメーターにパスワード値FILTEREDがあります..したがって、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 です:(新しいアプリを最初から試してみましたが、動作します..しかし、これを解決できませんか?

4

2 に答える 2

0

わかりました。この Railscast はパスワード列を使用しません。のみを使用します: email:string, password_hash:string,password_salt:string

于 2013-06-29T09:20:54.327 に答える
0

あなたのアプリケーションで何が問題になっているのか正確にはわかりませんが、あなたが言及しているRailscastは、最近ではhas_secure_password. その Railscast の改訂版エピソードがありますが、改訂版エピソードは有料の顧客のみが見ることができます。

もちろん、その新しい方法なしで認証を行うことを妨げるものは何もありません。そうすることに特に不利益があるとは思いませんが、どのようにhas_secure_password機能するかを確認したい場合は、この小さなチュートリアルを見てください

于 2013-06-27T19:39:29.753 に答える