4

私はYahoo、Google、Facebook、Twitterといった複数のプロバイダで認証できるRails 3.2アプリケーションに取り組んでいます。私はomniauthを使用していますが、基本的なワークフローを理解していますが、これらの特定のプロバイダをどのように設定するか、Railsアプリケーションをどのように設定してこれらの戦略を適切にテスト/使用できるかを記述した包括的なドキュメントは見つかりません開発、テスト、およびプロダクション環境を提供します。さまざまな環境でyahoo、google、facebook戦略でomniauthを使用して設定する方法は?

だから私の質問:(ヤフー、グーグル、TwitterやFacebook)、どのような手順は、彼らが開発に使用することができるように個別omniauthのた​​めに、それぞれを構成するために必要なこれらのプロバイダのそれぞれについて

  1. 、テスト環境と運用環境

  2. 実行中の環境でこれらのプロバイダを適切に使用するようにRailsアプリケーションを設定するには、どのような方法が最適ですか?

おかげ -

+0

あなたはDeviseを使用していますか? – Ashitaka

+0

いいえ私は純粋なオムニバスをしています – wgpubs

+0

さて、私はそれに応じて私の答えを編集しました。私は正しい方向にあなたを置くことを願っています!もしあなたが何か問題があれば、Ryan BatesのRailscastsをチェックするのを忘れないで、彼らは私にとって貴重です。 http://railscasts.com/episodes/241-simple-omniauth – Ashitaka

答えて

6

あなたの最初の質問については:

あなたは自分のOAuthプロトコルの使用を許可するために、FacebookやGoogleとTwitterのためのアプリケーションを作成する必要があります。ヤフーについては分かりません。 Yahooはまだ関連していますか?冗談だ。利用可能なすべてのOmniauthプロバイダー戦略のリストについては、hereにアクセスしてください。

ので、Facebookの:

https://developers.facebook.com/apps 
Create app. You'll be given an API Key and an API Secret. 
Settings > Basic > Website > Site URL: 
    your_website_callback_url for production 

ツイッター:

https://apps.twitter.com/ 
Create app. You'll be given an API Key and an API Secret. 
Settings > Callback URL: 
    your_website_callback_url for production 

グーグル:

https://console.developers.google.com 
Create app. You'll be given an API Key and an API Secret. 
Services > Select necessary services and scopes 
APIs & auth > Credentials > Create New Client ID: 
    http://localhost:3000/ for development/testing 
    your_website_callback_url for production 

次に、あなたのGemfile:

gem 'omniauth-facebook' 
gem 'omniauth-twitter' 
gem 'omniauth-google-oauth2' 

戦略を設定するファイルを作成します。大会ではomniauth.rbと命名されています。

# config/initializers/omniauth.rb 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, 'FACEBOOK_KEY', 'FACEBOOK_SECRET', { 
    secure_image_url: 'true', 
    image_size: 'square' 
    } 

    provider :twitter, 'TWITTER_KEY', 'TWITTER_SECRET', { 
    secure_image_url: 'true', 
    image_size: 'normal' 
    } 

    provider :google_oauth2, 'GOOGLE_KEY', 'GOOGLE_SECRET', { 
    image_size: 50, 
    image_aspect_ratio: 'square' 
    } 
end 

そしてthis railscastthis wikiに従ってください:各プロバイダに利用できるさまざまなオプションの束がありますが、あなたはそれらが何であるかを調査する必要があります。 ENV['FACEBOOK_KEY']のような環境変数を使用し、実行時にそれらを変更できるようにコンソールに設定して、特定のファイルでリポジトリにプッシュされないようにする必要があります(特に公開している場合)。 Here's a solutionこの問題。

最後に、追加情報については、各プロバイダのgem wikiを検索する必要があります。たとえば、facebook's omniauth gem readmeは、ユーザーがFacebookから認証したときにFacebookによって返される認証ハッシュの例を提供します。この情報を使用して、ユーザーモデルをカスタマイズすることができます(あなたのやりたいことに応じて自分のフルネームや自分のイメージを更新します)。また、公開されていないユーザーデータにアクセスするための追加のアクセス許可を求める方法についても言及しています。私が言ったように私は本当にRailscastsのように、

と私が考案し、OmniAuthが統合された2つのエピソードを追っ:

編集:あなたの質問に答えるために。これらのエピソードでは、omniauth-openid gemがGoogleとの認証に使用されています。その欠点は、あなたがアプリケーションを登録しないので、認証プロンプトをカスタマイズできないということです。 FacebookやTwitterでは、名前を選択したり、説明を入力したり、アプリケーションのロゴをアップロードしたりすることができます。また、あなたのウェブサイトの "プライバシー"と "利用規約"ページへのリンクを設定することもできます。これらのすべての小さな詳細は、ユーザーがこれらのサービスにログインしようとすると表示され、想像するとユーザーのコンバージョン率に影響します。

omniauth-openidでは、プロンプトをカスタマイズすることはできません。取得する情報は制限されています(アカウントに関連付けられた電子メールと名前のみ)。それが必要なものなら、あなたはすべて設定されています。ただし、ユーザーの画像を取得したい場合は、ユーザーのGoogle+プロフィールからのみ利用可能な他の個人情報にアクセスしてください。おそらくomniauth-google2と一緒に行く方が良いでしょう。

OmniAuthについての良い点は、基本的な基礎を身につければ、他のプロバイダを追加することは、アプリケーションを登録すること、APIキーと秘密を取得すること、特定の宝石を含めることなどです。最初はFacebookで最初に始めることをお勧めします。これは最も人気のあるサービスなので、ほとんどのドキュメント(または少なくともここではさらに多くの質問があります)のものです。そこから、アプリケーションをビルドし、他の認証方法を追加します。

+0

徹底的な答えをありがとう。いくつかの質問:1)あなたは 'omniauth-openid'をGoogleに使用していると言いますが、omniauth wikiにリストされている 'omniauth-google-oauth2'や 'omniauth-google'の宝石/戦略はなぜですか? 2)Railsアプリケーションがどのような環境でも動作するように、これらのプロバイダと異なる設定が必要ですか? – wgpubs

+0

私はあなたにここでお答えしたいと思っていましたが、私の反応はちょっと長くなってしまいました。私の編集された答えをチェックしてください! – Ashitaka

+0

最後の質問ですが、私は3つの別々のオムニバス戦略を使用しているとします...どちらのアプリケーションに対して重複アプリケーションを作成する必要がありますか?たとえば、Facebook、Twitter、Googleの2つのアプリケーションを作成する必要がありますか? 1つは開発用、もう1つは適切なコールバックURL付きのプロダクション用ですか?私はいくつかのプロバイダがこれを必要とすると仮定しますが、他のプロバイダはそうしません – wgpubs

0

WGは、現在、私は設定/初期化子/ devise.rbに環境固有のものを入れています。例:Facebook:

# Facebook strategy 
    require "omniauth-facebook" 

    case Rails.env 
    when "development" 
     config.omniauth :facebook, 'xxx', 'xxx', {:scope => 'manage_pages,publish_stream,offline_access,email'} 
    when "production" 
     config.omniauth :facebook, 'xxx', 'xxx', {:scope => 'manage_pages,publish_stream,offline_access,email'} 
    end 

これはあなたを助けます。

関連する問題