私はこれを狂ったようにグーグルで検索してきましたが、これまでのところ運がありません。
これまでのところ、sign_in と sign_out は正常に機能しています。彼らは正しい行動にリダイレクトします。私の問題は、sign_in が失敗したときです。「無効なログインまたはパスワード」を表示する空白の HTML ページのように見えるものが表示されます。createアクションによってレンダリングされるテキスト、またはcreateアクションによってレンダリングされるテキスト。AFAIK createは、失敗した場合にのみリダイレクトまたはレンダリングする必要があります。私はカスタム コントローラーを持っており、ここに記載されているデバイス コードを持っている唯一の理由は、動作が発生している場所を確認することです。認証後にカスタム パスにリダイレクトしようとしていないため、この時点で動作を継承するだけで十分です。
ログは次のようになります。
Started POST "/login.user" for 127.0.0.1 at 2012-05-14 15:50:02 -0700
Processing by Users::SessionsController#create as
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pf2+YBqmb5+231nbuD/MeDlz6H7/qOjV4N50WnlJ0rc=", "user"=>{"login"=>"qwdwqqd", "password"=>"[FILTERED]", "remember_me"=>"0"}, "x"=>"40", "y"=>"8"}
Completed 401 Unauthorized in 32ms
これが私のコントローラーです:
Users::SessionsController < ::Devise::SessionsController
def create
resource = warden.authenticate!(auth_options)
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_in_path_for(resource)
end
私のルートは次のとおりです。
devise_for :users, :controllers => {:sessions => "users/sessions", :registrations => "users/registrations"}, :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout' }
.
.
root :to => 'root#index'
私はそれが過ぎ去っていないと判断しました
resource = warden.authenticate!(auth_options)
認証失敗時の回線
ウォーデンによる失敗時に、リソース名が何らかの形でログインパスに追加されているようです。例: /login の代わりに /login.user
事前に感謝します。
Rails 3.2、Devise 2.0.4、ラック (1.4.1)、ルビー 1.9.3