4

ログインプロセスにDeviseとOmniauthを使用しています。どういうわけか、ルート「users / auth/facebook」または「users/auth/twitter」に問題なくアクセスできます。しかし、私がルートをレーキするときにそれらは表示されないので、これらのパスを取得するためのヘルパーメソッドが何であるかわかりません(たとえば、something_something_path)。誰かが私を助けることができますか?

すべてのルートを表示することはできませんが、表示されている「/ users / auth / ...」に一致するルートはこれ(レーキルートから)のみであると言えます。

 user_omniauth_callback        /users/auth/:action/callback(.:format)    {:action=>/(?!)/, :controller=>"users/omniauth_callbacks"}

ところで、私が「ルートにうまくアクセスできる」と言うとき、私はこれが機能することを意味します(私をFacebookまたはTwitterに正しくリダイレ​​クトします):

<%= link_to "Connect", "users/auth/facebook" %>

また、ルートは、ユーザーモデルのデフォルトのDeviseオムニ認証ルートである必要があります

4

2 に答える 2

3

これが に表示されない理由についてはrake routes、まずタスクがどのように実装されているかに注意してください。これはrailtiesの一部であり、次のように表示するルートを取得します。

Rails.application.routes.routes

Rails.applicationしたがって、ルートを求めていることがわかります。


次に、Omniauth gemは「Rack ミドルウェアを利用した柔軟な認証システム」であることに注意してください。

Rails.applicationRack ミドルウェアを使用するため、によって使用されるについて何も「認識」しないrake routesため、そのルートはそのタスクに表示されません。

この Railcastで、Rack ミドルウェアの優れた紹介を得ることができます。


スタック内の Rails アプリの前に表示されるrake middlewareことがわかります。では、ルートOmniAuth::Builderをどのように処理するのでしょうか。auth/twitter

の arequest_pathをチェックすることでそうします。ここcallでチェックを確認でき、ここで がどのように構築されているかを確認できます(はデフォルトで、あなたの場合は.request_pathpath_prefixauthnametwitter

Devise で Omniauth を使用する場合、ここpath_prefixに記載されているように が自動的に設定されます。

于 2012-05-31T15:28:47.603 に答える
0

なぜ彼らがレーキルートに現れないのか、私にはわかりません。ただし、エイリアスを知りたい場合は、https ://github.com/plataformatec/devise/wiki/OmniAuth%3A-概要で見つけることができます。

彼らのドキュメントから:

現在、Deviseでは1つのモデルのみを認証可能にすることができます。User omniauthableという名前のモデルを作成した後、「devise_for:users」がすでにconfig / routers.rbに追加されている場合、Deviseは次のurlメソッドを作成します。

user_omniauth_authorize_path(プロバイダー)user_omniauth_callback_path(プロバイダー)

したがってdevise_for :model、ルートにある場合は、そのurlメソッドが表示されます。

例:

<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %>

また、deviseの実装を見ると、URLヘルパーがそこにあることがわかります。

https://github.com/plataformatec/devise/blob/master/lib/devise/omniauth/url_helpers.rb

于 2012-05-30T22:11:19.037 に答える