これは、Omniauthの開発部門のドキュメントです。最新の安定したリリースのドキュメントはこちらから見つけることができます
Omniauthは、Webアプリケーションのマルチプロバイダー認証を標準化するライブラリです。それは強力で柔軟であり、できるだけ少ないことをするために作成されました。開発者は、異なるシステムを介してユーザーを認証できるOmniauthの戦略を作成できます。 Omniauth戦略は、FacebookからLDAPまで、すべてのために作成されています。
アプリケーションでOmniauthを使用するには、1つ以上の戦略を活用する必要があります。これらの戦略は一般にRubymsとして個別にリリースされており、このプロジェクトのWikiのコミュニティ維持リストを見ることができます。
Developerと呼ばれる1つの戦略がOmniauthに含まれており、ユーザーに認証情報を直接促し、それを直接通過させる完全に不安定な非生産可能な戦略を提供します。開発を開始するときにプレースホルダーとして使用し、後で他の戦略に簡単に交換できます。
各Omniauth戦略はラックミドルウェアです。つまり、他のラックミドルウェアを使用するのと同じ方法で使用できることを意味します。たとえば、シナトラアプリケーションで組み込みの開発者戦略を使用するには、これを行うことができます。
require 'sinatra'
require 'omniauth'
class MyApplication < Sinatra :: Base
use Rack :: Session :: Cookie
use OmniAuth :: Strategies :: Developer
end Omniauthはマルチプロバイダー認証用に構築されているため、複数の戦略を実行するために部屋を離れることをお勧めします。このため、組み込みのOmniAuth::Builderクラスは、複数の戦略を簡単に指定する簡単な方法を提供します。次のコードと各戦略をミドルウェアとして個別に使用することに違いはないことに注意してください。これはconfig/initializers/omniauth.rbでRails Initializerに入れられる可能性のある例です。
Rails . application . config . middleware . use OmniAuth :: Builder do
provider :developer unless Rails . env . production?
provider :twitter , ENV [ 'TWITTER_KEY' ] , ENV [ 'TWITTER_SECRET' ]
end特定の初期化要件に使用するプロバイダーごとにドキュメントを検討する必要があります。
Omniauthは非常に低いタッチライブラリです。これは、認証が必要なときにアプリケーションのユーザーを送信してから情報を取り戻すことができるブラックボックスになるように設計されています。 Omniauthは、ユーザーモデルと自動的に関連付けたり、使用したい認証方法の数や、ユーザーが認証されたらデータで何をしたいかについて仮定しないように意図的に構築されました。これにより、Omniauthは非常に柔軟になります。 Omniauthを使用するには、ユーザーを/auth/:providerにリダイレクトするだけです。ここで:provider戦略の名前(たとえば、 developerやtwitter )です。そこから、Omniauthは、選択した戦略で認証するために必要な手順を引き継ぎ、ユーザーを連れて行きます。
ユーザーが認証されたら、次に何をしますか? Omniauthは/auth/:provider/callbackの要求のラック環境に認証ハッシュと呼ばれる特別なハッシュを設定します。このハッシュには、Omniauthが使用された戦略から収集することができたのと同じくらい多くのユーザーが含まれています。コールバックURLに一致するアプリケーションにエンドポイントを設定し、アプリケーションに必要な手順を実行する必要があります。
環境ハッシュのomniauth.authキーは、一意のID、認証に使用した戦略、および利用可能な名前やメールアドレスなどの個人情報を含む、公正なユーザーに関する情報を含む認証ハッシュを提供します。認証ハッシュに含まれる可能性のあるものの詳細な説明については、Auth Hash Schema Wikiページを参照してください。
Omniauthは、コールバック要求に環境情報を設定する以外にアクションを実行しないことに注意してください。アプリケーションの認証フローの詳細をどのように実装したいかは、完全にあなた次第です。
omniauth 、rack_csrfでootb互換ではありません。そのためには、次のコードをアプリケーションブートストラップコードに追加する必要があります。
OmniAuth :: AuthenticityTokenProtection . default_options ( key : "csrf.token" , authenticity_param : "_csrf" ) 開始するには、次の宝石を追加します
Gemfile :
gem 'omniauth'
gem "omniauth-rails_csrf_protection"次に、Omniauthをミドルウェアとして挿入します
config/initializers/omniauth.rb :
Rails . application . config . middleware . use OmniAuth :: Builder do
provider :developer if Rails . env . development?
end追加のプロバイダーは、将来ここに追加できます。次に、ルート、コントローラー、ログインビューを使用してすべてを配線します。
config/routes.rb :
get 'auth/:provider/callback' , to : 'sessions#create'
get '/login' , to : 'sessions#new'app/controllers/sessions_controller.rb :
class SessionsController < ApplicationController
def new
render :new
end
def create
user_info = request . env [ 'omniauth.auth' ]
raise user_info # Your own session management should be placed here.
end
endapp/views/sessions/new.html.erb :
<%= form_tag('/auth/developer', method: 'post', data: {turbo: false}) do %>
< button type =' submit ' > Login with Developer </ button >
<% end %>これで、 /loginしてログインボタンをクリックすると、Omniauth開発者のログイン画面が表示されます。それを送信した後、 Sessions#createでアプリケーションに返送されます。 Raiseは、それを自分のユーザー管理に統合するために利用できるすべてのOmniauthの詳細を表示する必要があります。
ボックスから外れたい場合は、deviseを使用してOmniauthの使用を検討する必要があります。詳細については、Devise Githubページをご覧ください。
次のミドルウェアは(デフォルトで)Railsアプリケーションのセッション管理に含まれています。 Rails APIでOmniauthを使用する場合、これらの必要なミドルウェアのいずれかを再び追加する必要があります。
ActionDispatch::Session::CacheStoreActionDispatch::Session::CookieStoreActionDispatch::Session::MemCacheStoreこれらを追加する秘trickは、デフォルトでは、追加された場合(セッションキーを含む) session_optionsに合格するため、 session_store.rb initializerを追加するuse ActionDispatch::Session::CookieStoreはできません。
明確にするには、セッションが機能する場合がありますが、セッションオプションは無視されます(つまり、セッションキーはデフォルトで_session_idになります)。イニシャルイザーの代わりに、ミドルウェアが構築される前に関連するオプションをどこかに設定する必要があります( application.rbなど)。
Application.RB:
config . session_store :cookie_store , key : '_interslice_session'
config . middleware . use ActionDispatch :: Cookies # Required for all session management
config . middleware . use ActionDispatch :: Session :: CookieStore , config . session_options(ありがとう@mltsy)
Omniauthは、構成可能なロガーをサポートします。デフォルトでは、OmniauthはSTDOUTにログに記録しますが、 OmniAuth.config.loggerを使用してこれを構成できます。
# Rails application example
OmniAuth . config . logger = Rails . logger origin URLパラメーターは、通常、ユーザーがどこから来たのか、どこから、それを使用するかを選択した場合、戻りたい場所を通知するために使用されます。 Omniauthは、プロバイダーレベルで構成できる次の設定をサポートしています。
デフォルト:
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ]
POST /auth/twitter /?o rigin = [ URL ]
# If the `origin` parameter is blank, `omniauth.origin` is set to HTTP_REFERER異なる名前のオリジンパラメーターを使用してください:
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ] , origin_param : 'return_to'
POST /auth/twitter /?r eturn_to = [ URL ]
# If the `return_to` parameter is blank, `omniauth.origin` is set to HTTP_REFERER無効:
provider :twitter , ENV [ 'KEY' ] , ENV [ 'SECRET' ] , origin_param : false
POST /auth/twitter
# This means the origin should be handled by your own application.
# Note that `omniauth.origin` will always be blank. Omniauth Wikiは、Omniauthの詳細なドキュメントを積極的に維持しています。 Omniauthのより詳細な見方、それがどのように機能するか、それをどのように使用するかについて疑問に思うなら、それはあなたの最初の停留所でなければなりません。
Tideliftサブスクリプションの一部として利用可能。
Omniauthと他の何千ものパッケージのメンテナーは、Tideliftと協力して、アプリケーションを構築するために使用するオープンソースパッケージの商業サポートとメンテナンスを提供しています。使用する正確なパッケージのメンテナーに支払いながら、時間を節約し、リスクを減らし、コードの健康を改善します。もっと詳しく知る。
Omniauthは、2.5、2.6、2.7、3.0、3.1、3.2、Truffleruby、およびJrubyでテストされています。
このライブラリは、セマンティックバージョンの2.0.0を順守することを目的としています。このスキームの違反は、バグとして報告する必要があります。具体的には、後方互換性を破るマイナーまたはパッチバージョンがリリースされている場合、そのバージョンはすぐにヤンクする必要があります。 Public APIの壊れた変更は、新しい主要バージョンでのみ紹介されます。このポリシーの結果として、2桁の精度で悲観的なバージョンの制約を使用して、このGEMへの依存性を指定することができます(またそうすべきです)。例えば:
spec.add_dependency 'omniauth', '~> 1.0'
Copyright(c)2010-2017 Michael Bleigh and Intridea、Inc。詳細については、ライセンスを参照してください。