23394


BCrypt::Errors::InvalidHash in Devise::SessionsController#createとエラーが表示されました。  
またinvalid
hashとも表示されました。これは、SessionsControllerのcreateアクションのhashが無効である、という意味かなと思いましたが、SessionsControllerなるものをつくっていないです。解釈が間違っているのでしょうか？

application_controller.rb

[code]

    class ApplicationController < ActionController::Base
    
      before_action :configure_permitted_parameters, if: :devise_controller? 
      # Prevent CSRF attacks by raising an exception. 
      # For APIs, you may want to use :null_session instead. 
      protect_from_forgery with: :exception
    
      # privateメソッドを定義し、deviseの新規登録フォームでnameを受け取れるようにしてください 
      include ApplicationHelper
    
      private
    
      def configure_permitted_parameters 
        devise_parameter_sanitizer.for(:sign_up) << [:name,:email,:username,:password] 
        devise_parameter_sanitizer.for(:sign_in) << [:login,:username,:remember_me] 
      end 
    end 
    
[/code]

home_controller.rb

[code]

    class HomeController < ApplicationController 
      def top 
          if user_signed_in? 
          # 変数@noteにNoteクラスのインスタンスを代入してください 
          @note = Note.new 
          # 変数@notesにNoteクラスのインスタンスの配列を降順で代入してください 
          @notes = Note.all.order(created_at: :desc) 
        else 
          @message = "ようこそKotoritterへ！" 
        end 
      end
    
      def about 
      end 
    end 
    
[/code]


CC BY-SA 3.0
2016-03-21T07:54:03.810
23315
2016-03-23T13:23:43.677
2016-03-21T08:35:02.417
8000
14754
question
ruby-on-rails
BCrypt::Errors::InvalidHash in Devise::SessionsController#createの意味


`Devise::SessionsController`はDeviseで実際に認証などの処理をしているControllerです。

Deviseを使ってユーザー認証をする場合、ユーザー登録時、パスワードは元の文字列そのままではなく、元の文字列に戻せないよう変換した形でDBに保存されます。この処理をやっているのがBCryptというライブラリです。

この変換処理を施した後の文字列は、`$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW`こんな感じになっているのですが、一定の書式がある文字列になっています。

`BCrypt::Errors::InvalidHash`は、BCryptが上記の文字列を読み込んだ時に適切なフォーマットになっていないと発生する例外です。

DBの`users`テーブル(Deviseのセットアップ時に変更した場合は適宜読み替えてください)の`ecrypted_password`に保存されている値が不正な値になっていると思います。


CC BY-SA 3.0
2016-03-23T13:23:43.677
23394
2016-03-23T13:23:43.677
5793
23315
answer