2016-07-08 7 views
1

私はSorceryからDeviseに切り替えました。ソーサリーは半無効であり、認証はレール5で働いていますが、テストヘルパーはそうではありません。だから、私はスイッチをDeviseにすることに決めました。私は恐ろしい401のエラーを得ています:401エラーでDevise認証が失敗する

Completed 401 Unauthorized 

私はこれに関して多くの質問を見ました...しかし、それらの回答は私を助けませんでした。

私はSorceryのインストールのいくつかの残骸があるとすぐに思うので、私の質問は少し誤解を招く。私はそうかもしれないが、徹底的にチェックした。

1 - 私がパスワードを忘れた場合、私は自動的にログインします。

2 - I完全にクリア既存のパスワードであれば(私は魔術の暗号化は、暗号化を考案よりも差分であるかなり確信しているため)、工夫使っOR

3パスワードを更新 - 私が考案内で認証のために撮影したパスをトレースしていると、私の問題は、以下の方法がヒットしたときに表面:!

def valid_password?(password) 
    Devise::Encryptor.compare(self.class, encrypted_password, password) 
end 

それはそのencrypted_pa​​sswordを思わ=パスワードが正常に工夫使用して更新されたにもかかわらず、パスワードを入力します。

私はDeviseメソッドのuser.skip_confirmationを使用していることを指摘しておく必要があります。手動でユーザーを確認するので、ユーザーの確認はこの問題の一部ではありません。

私はカスタムDeviseビューを使用しています(まだ変更はしていませんが)。私はカスタム・セッション・コントローラーも生成しました。なぜなら、この問題がPunditポリシーに関連していると思うからです。しかし、私は次のように使用して、アプリケーションのコントローラでポリシー検証をスキップしています...そう、評論家が問題になることはありません。

after_action :verify_authorized, except: :index, unless: :devise_controller? 
after_action :verify_policy_scoped, only: :index, unless: :devise_controller? 

cookies_serializerは、私が持っている...他の回答に回数を育ててきました試してみました:json、:marshal、::影響のないハイブリッド。

Devise :: Encryptor.compare(self.class、encrypted_pa​​ssword、password)がfalseを返すため、認証に失敗しています。しかし、Deviseが新しいパスワードを保存した場合---どのように比較できるかは真実を返さない。そして、はい---資格情報を正しく入力しています。

ありがとうございました!

答えて

0

だから、attr_accessor:password、:password_confirmationはもはやDeviseには必要なく---私の問題を担当していました。 attr_accessor:passwordを設定すると、私のアプリケーションはパスワード=()メソッドを作成していました。このメソッドは、同じメソッドをdeviseでオーバーライドしていました。その結果は、私のパスワードがどんなものになっても問題なかった。私はもともと私自身のパスワードのセッターを作成することでこれを見つけた:考案の内部で同じ正確な方法がある

def password=(new_password) 
    @password = new_password 
    self.encrypted_password = password_digest(@password) if @password.present? 
end 

を。このメソッドを使用すると、パスワードが保存され、ログインできました。私はこれが奇妙だと思ったので...私のカスタムメソッドを削除し、attr_accessorと認証が引き続き機能しました。ですから、基本的にはattr_accessorがdeviseメソッドをオーバーライドしてから、attr_accessorメソッドをオーバーライドするsetterメソッドを作成しました。

これは多大な労力を要し、最終的には非常に単純なものでした。私はこれが他の誰かを助けることを望む。私はいくつかの追加のテストをしており、もし私が何かを見つけたら、私はこれを修正するでしょう。

関連する問題