あなたのリンクはこれに見えるはずです:
<%= link_to "Sign in with Facebook", "/auth/facebook" %>
また、いくつかのコールバックルートを作成する必要があり、これを行うには2つの方法があります。次のいずれかを実行できます。
すべてのコールバックをキャッチし、単一のコントローラーのアクションにリダイレクトするルートを定義します。
get "/auth/:provider/callback" => "authentications#create"
次に、を使用params[:provider]
してプロバイダーの名前を取得できます。を使用するif
と、プロバイダーに応じて異なる方法で処理を実行できます。
または、コントローラー内のさまざまなアクションを指すことができるすべての単一プロバイダーのルートを定義します。
get "/auth/twitter/callback" => "authentications#twitter"
get "/auth/facebook/callback" => "authentications#facebook"
これらのルートは、単一のルートにまとめることもできます。
get "/auth/:action/callback",
:to => "authentications",
:constraints => { :action => /twitter|facebook/ }
次に、これらのアクションを定義する必要があります。たとえば、Twitterアクションではユーザーのツイートを取得でき、Facebookアクションではユーザーの投稿を取得できます。
failure
また、ユーザーが特定のプロバイダーへのログインを許可しない状況に対処するためのアクションを作成することを忘れないでください。
今、あなたは問題に遭遇するでしょう。リンクが指す場所をどのように見つけますか?TwitterとFacebookの場合、それはかなり明白に思えます(それぞれ/auth/twitter
と/auth/facebook
)。
omniauth-google-oauth2
しかし、 gemを使用してGoogle+を使用してサインインしている場合はどうなりますか?あなたの唯一の望みは、各omniauth gem(ここにリストされている)にいくつかの優れたドキュメントがあることです。
いずれにせよ、使用するURLがわからない場合や、特定の宝石で使用されているURLが気に入らない場合は、いつでも変更できます。
たとえば、/auth/google_oauth2
少なくともfacebookやtwitterのURLと比較すると、URLは確かにきれいではありません。URLを変更するには、name
オプションを使用します。
# omniauth.rb, when using pure omniauth
provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'],
{
name: 'google'
}
# devise.rb, when using omniauth+devise
config.omniauth :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'],
{
name: 'google',
}
/auth/google
これで、URLをより適切に使用できるようになりました。
注:私はいくつかの言及をしましたAuthenticationsController
が、おそらくあなたが持っているものはまたはであり、あなたがそれを何と呼ぶかは実際には重要ではありませんCallbacksController
。OmniauthCallbacksController