誰もが私にこの問題の底に手を差し伸べることができますか?Devise + Omniauthコールバックが正しいコントローラにヒットしないのはなぜですか?
私はDevils + OmniauthをRails 3.2アプリで使用しています。私が知りたいことは、Deviseのuser_omniauth_authorize_path(provider)
メソッドで何が起こっているのかです。
私はレイクルートと宝石のソースから掘り出し物を持っていましたが、私が持っている問題の原因となるものは何も明白ではありません。
このメソッドはプロバイダのsignin url(たとえばTwitter)を呼び出し、routes.rbで定義されたコールバックパスに戻ると仮定します。私は、ユーザー/ omniauth_callbacks_controller.rbで
devise_for :users, :controllers => { :omniauth_callbacks => 'users/omniauth_callbacks'}
devise_scope :user do
get '/users/auth/:provider' => 'users/omniauth_callbacks#passthru'
end
を持っている私のroutes.rbをで
私は<%= link_to "Twitter", user_omniauth_authorize_path(:twitter) %>
を持つビューで
def twitter
render :text => "This works"
end
def passthru
render :text => "This doesn't work"
end
を持っています。このリンクをクリックするとログインできるTwitterに行きますが、アプリに戻ったら「あなたはすでにサインインしています」というエラーが表示されます。
このエラーがどのように発生するのか、またなぜこのエラーが発生するのかは分かりません。私は "この作品"または "これは動作しません"を見ているだけです。
Facebookのプロバイダもまったく同じ方法で設定していますが、これは期待どおりに動作します。
私がDevitsのomniauthリンクを<a href="https://stackoverflow.com/users/auth/twitter">Twitter</a>
に置き換えた場合、「これはうまくいく」と表示されます。
これは私の問題を解決しますが、それは理想的ではなく、私は理由を知りたいと思います。
誰でも光を放つことはできますか?
EDIT
レーキルートは次のようになります。
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:twitter|facebook)
こんにちはaskitaka、これらの提案に感謝。私は勧告に基づいて 'パススルー 'を使用しています。https://github.com/plataformatec/devise/wiki/OmniAuth:-Overviewとhttp://stackoverflow.com/questions/5531263/omniauth-doesnt-work-with-route -globbing-in-rails3ルートのグロビング。これはもはやお勧めですか?とにかく、あなたは私にいくつかの新しいことを考えさせてくれました。ありがとう!私はこれを試して報告します。 –
こんにちは、GETコールを比較することで意味を説明できますか?コンソールで 'app.get '/ users/auth/twitter''を実行しました。どちらの呼び出しも '302'を返します。これは期待されています。これらの呼び出しを詳細に調べる方法はありますか?または302リダイレクトに従う? –
Doh!これについてもう少し考えてみると、あなたは正しいです。それはパススルー機能でした。私はルートにキャッチを持っているのでパススルーを使用しています。他の作業をしている間、私はこの機能を編集して私の質問に従ってテキストをレンダリングしました。しかし、このコントローラの目的は、omniauthリクエストで404を返すことです。パススルー機能がなければ、オムニアは単に機能しません。ちょっと愚かな気分になりました:)このことを指摘してくれてありがとう! –