2017-08-17 11 views
0

私は基本的なユーザ認証のためにRails(5.1.2)でBcrypt(3.1.11)とhas_secure_passwordを使用しようとしています。それはかなり簡単なはずですが、そうではありません!Bcryptによるユーザ認証

コードは正確でなければならないので、私はかなりRailscastからすべてのコードをコピーしたが、エラーメッセージが私に言っている:以下

ActiveRecord::StatementInvalid in UsersController#create 
SQLite3::SQLException: no such column: users.password: SELECT 1 AS one FROM "users" WHERE "users"."password" = ? LIMIT ? 

UsersController#create

def create 
    @user = User.new(user_params) 
    if @user.save 
    session[:user_id] = @user.id 
    redirect_to root_url, notice: "Thank you for signing up!" 
    else 
    render "new" 
    end 
end 
のコードです

と強いのparams:

private 
def user_params 
    params.require(:user).permit(:email, :password, :password_confirmation) 
end 

とユーザモデル:

class User < ApplicationRecord 
has_secure_password 
validates_uniqueness_of :email, :password, :password_confirmation 
end 

私はこの問題が何であるかはっきりしていないので、助けていただければ幸いです。

+0

私たちにユーザーモデル –

+0

を表示してくださいこれは、 – Robert

+0

'validates_uniqueness_of:email、:password、:password_confirmation'を削除して再試行しました。 –

答えて

0

マイanswser(変更ユーザーモデル):

class User < ApplicationRecord 
has_secure_password 
validates_uniqueness_of :email 
end 

has_secure_passwordでは、次の検証が自動的に追加され

  • パスワードを作成
  • を上に存在しなければなりませんパスワードの長さは72文字以下でなければなりませんS(password_confirmation属性を使用して)パスワードの
  • 確認

パスワード確認の検証が必要とされていない場合は、単純に、すなわち(password_confirmationため 値を除外それにはフォームフィールド を指定しないでください)。この属性にnil値が指定されている場合、検証は実行されません( )。

実際、パスワードは暗号化されるので、誰も自分自身だけを知ることはありません。メールを一意に制御する理由を理解できますが、パスワードは必要ありません。

関連する問題