2017-03-01 9 views
1

電子メール(この場合はレジストリ番号)と700レコードのencrypted_pa​​sswordを持つUserモデルがあり、deviseによって生成されました。それハッシュパスワードと古いパスワードスタイルを作成する

Number encrypted_pasword 
345  76576545672 

は私が有効なbcryptのために文字列形式でこのパスワードを変換するために、このソリューションを使用するように

は、これはしているように見えますが、私はこのエラーに

Started POST "https://stackoverflow.com/users/sign_in" for ::1 at 2017-03-01 16:23:47 -0300 
Processing by Devise::SessionsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"VnOD8783DV191j0CnruEdhDeF15SQjJEW6ilCeJxFRoZqaBuu6PtgRtfpyHeqE43KD6ra9c3e6BLitcltt2qng==", "user"=>{"email"=>"5262", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} 
    User Load (4.0ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = '5262' ORDER BY `users`.`id` ASC LIMIT 1 
Completed 500 Internal Server Error in 16ms (ActiveRecord: 4.0ms) 



TypeError (no implicit conversion of nil into String): 

app/models/user.rb:13:in `digest' 
app/models/user.rb:13:in `hexdigest' 
app/models/user.rb:13:in `rescue in valid_password?' 
app/models/user.rb:10:in `valid_password?' 

ユーザーモデル

を取得しています
class User < ApplicationRecord 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    alias :devise_valid_password? :valid_password? 

    def valid_password?(encrypted_password) 
    begin 
     super(encrypted_password) 
    rescue BCrypt::Errors::InvalidHash 
     return false unless Digest::SHA1.hexdigest(password) == encrypted_password 
     logger.info "User #{email} is using the old password hashing method, updating attribute." 
     self.encrypted_password = encrypted_password 
     true 
    end 
    end 
end 

この問題を解決するための最後の試みです。 助けてくれてありがとう!

EDIT

私はこの使用:

return false unless Digest::SHA1.hexdigest(:password.to_s) == encrypted_password 

をしかし、私はこのエラーを受け取っし、私は

Started POST "https://stackoverflow.com/users/sign_in" for ::1 at 2017-03-01 17:01:10 -0300 
Processing by Devise::SessionsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"+Gk/T1r1k1zHiLIXFCupiTxOudwcx1lLAQOiS6W7teiU54UUAvB6AvpmZ+LfXBpyiPbq9Z20IZ8bIyZdWqCx8g==", "user"=>{"email"=>"5262", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} 
    User Load (4.0ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = '5262' ORDER BY `users`.`id` ASC LIMIT 1 

Completed 401 Unauthorized in 40ms (ActiveRecord: 4.0ms) 


Processing by Devise::SessionsController#new as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"+Gk/T1r1k1zHiLIXFCupiTxOudwcx1lLAQOiS6W7teiU54UUAvB6AvpmZ+LfXBpyiPbq9Z20IZ8bIyZdWqCx8g==", "user"=>{"email"=>"5262", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} 
    Rendering C:/Ruby23/lib/ruby/gems/2.3.0/gems/devise-4.2.0/app/views/devise/sessions/new.html.erb within layouts/application 
    Rendered C:/Ruby23/lib/ruby/gems/2.3.0/gems/devise-4.2.0/app/views/devise/shared/_links.html.erb (8.0ms) 
    Rendered C:/Ruby23/lib/ruby/gems/2.3.0/gems/devise-4.2.0/app/views/devise/sessions/new.html.erb within layouts/application (184.1ms) 
    Rendered shared-templates/_header.html.erb (8.0ms) 
Completed 200 OK in 1963ms (Views: 1627.1ms | ActiveRecord: 0.0ms) 
+0

は、あなたのコントローラのアクション 'ユーザー#のsign_in'のコードを投稿したり、自動的に工夫が取り扱うことにあるだろうか? – eiko

+0

@エイコそれはdeviseによってgeneretedされました –

答えて

1

はこのお試しくださいログインページにリダイレクトされました:

def valid_password?(input_password) 
    begin 
     super(input_password) 
    rescue BCrypt::Errors::InvalidHash 
     return false unless Digest::SHA1.hexdigest(input_password) == encrypted_password 
     logger.info "User #{email} is using the old password hashing method, updating attribute." 
     self.password= input_password 
     true 
    end 
    end 

手動でbcryptの持つすべてのあなたの古いパスワードをハッシュする場合は、代わりにこれを行うことができます:

def valid_password?(password) 
    begin 
    super(password) 
    rescue BCrypt::Errors::InvalidHash 
    super(Digest::SHA1.hexdigest(password)) 
    end 
end 
+0

こんにちは、恵子、助けてくれてありがとう。 それは 未定義のローカル変数やメソッドが ' は#はparamsはエラーを与える<ユーザー:0xa42eab0> –

+0

しかし、私のモデルは –

+0

@VictorRodriguezをencrypted_pa​​sswordするように設定されているので、私は、『パスワード』または『encrypted_pa​​ssword』を使用する場合、私は知りませんうまくいけば新しいコードで私の答えを更新しました。 – eiko

関連する問題