1

私はこれを狂ったようにグーグルで検索してきましたが、これまでのところ運がありません。

これまでのところ、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

4

1 に答える 1

0

他の誰かがまだ疑問に思っている場合に備えて。create_user_session フォームの resource 引数を削除しました。言い換えれば、私はこれから行きました:

<%= form_for(resource, :as => resource_name, :url => user_session_path(resource)) do |f| %>

これに:

<%= form_for(resource, :as => resource_name, :url => user_session_path) do |f| %>

それはトリックをしました。以前にここを見ていなかったので、私はかなりばかげていると感じています。

于 2012-05-23T16:58:53.343 に答える