Ruby on Railsアプリケーションにログインを追加する

1

Auth0を構成する

Auth0のサービスを利用するには、Auth0 Dashboadに設定済みのアプリケーションがある必要があります。Auth0アプリケーションは、開発中のプロジェクトに対してどのように認証が動作して欲しいかを構成する場所です。

アプリケーションを構成する

対話型のセレクターを使ってAuth0アプリケーションを新規作成するか、統合したいプロジェクトを表す既存のアプリケーションを選択します。Auth0のすべてのアプリケーションには英数字からなる一意のクライアントIDが割り当てられており、アプリケーションのコードがSDKを通じてAuth0 APIを呼び出す際に使用されます。

このクイックスタートを使って構成されたすべての設定は、Dashboardのアプリケーションを自動更新します。今後、アプリケーションの管理もDashboardで行えます。

完了済みの構成を見てみたい場合は、サンプルアプリケーションをご覧ください。

Callback URLを構成する

Callback URLとは、Auth0がユーザーを認証後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはログイン後にアプリケーションに戻りません。

ログアウトURLを構成する

ログアウトURLとは、Auth0がユーザーをログアウト後にリダイレクトするアプリケーション内URLです。設定されていない場合、ユーザーはアプリケーションからログアウトできず、エラーを受け取ります。

Allowed Web Origins(許可されているWebオリジン)を構成する

Allowed Web Origin(許可されているWebオリジン)とは、認証フローへのアクセスを許可されるURLです。これにはプロジェクトのURLが含まれている必要があります。適切に設定されていない場合、プロジェクトが認証トークンを暗黙でリフレッシュできず、ユーザーがアプリケーションを再び訪問した時、またはページを再読み込みした時にログアウトした状態になってしまいます。

2

依存関係を追加する

認証フローをハンドリングするには、カスタムOmniAuthストラテジーであるomniauth-auth0を使います。

Gemfileに次の依存関係を追加します:

gem 'omniauth-auth0', '~> 3.0'
gem 'omniauth-rails_csrf_protection', '~> 1.0' # prevents forged authentication requests

Was this helpful?

/

gemが追加されたら、bundle installでインストールします。

3

SDKを構成する

構成ファイル./config/auth0.ymlを作成して、Auth0 Dashboardにあるアプリケーションの[Settings(設定)]で確認できるAuth0ドメイン、クライアントID、クライアントシークレットの値を指定します。

4

OmniAuthミドルウェアを構成する

./config/initializers/auth0.rbという以下のイニシャライザーファイルを作成し、前の手順で作成した構成ファイルでOmniAuthミドルウェアを構成します。

callback_pathがAuth0アプリケーションの[Allowed Callback URLs(許可されているコールバックURL)]にある値と一致することを確認します。

5

Auth0コントローラーを追加する

ログアウトURLを構築するために、認証コールバック、logoutアクション、メソッドをハンドリングするAuth0コントローラーを作成します。

次のコマンドを実行します:rails generate controller auth0 callback failure logout --skip-assets --skip-helper --skip-routes --skip-template-engine

コールバックメソッドの内部で、(request.env['omniauth.auth']として返された)ユーザー情報のハッシュをアクティブセッションに割り当てます。

ログアウトを構築するため、logoutアクションの内部でreset_sessionメソッドを呼び出し、セッション内に保存されたオブジェクトをすべて消去します。それから、Auth0ログアウトエンドポイントにリダイレクトします。reset_sessionについての詳細は、「Ruby on Rails ActionController」ドキュメントをご覧ください。

6

ルートを構成する

これらのルートを./config/routes.rbファイルに追加します。

ルートは所定の位置になければなりません。これにより、RailsはさまざまなAuth0 Callback URLを前の手順で作成したAuth0コントローラーにルートする方法を認識します。

checkpoint.header

アプリケーションを実行して、意図通りに動作し続け、Auth0に関連したエラーを受け取らないことを確認します。

7

アプリケーションにログインを追加する

ユーザーが/auth/auth0エンドポイントを訪れると、アプリケーションにログインできるようになりました。

<!-- Place a login button anywhere on your application -->
<%= button_to 'Login', '/auth/auth0', method: :post %>

Was this helpful?

/

checkpoint.header

選択されるとユーザーを/auth/auth0エンドポイントにリダイレクトするボタンを、アプリケーションに追加します。ログインのためAuth0にリダイレクトされ、認証に成功するとアプリに戻されることを確認してください。

8

アプリケーションにログアウトを追加する

Railsアプリケーションにログインできるようになったら、ログアウトする方法が必要です。ユーザーをauth/logoutアクションにリダイレクトしてログアウトさせると、ユーザーはAuth0ログアウトエンドポイントへリダイレクトされます。

<!-- Place a logout button anywhere on your application -->
<%= button_to 'Logout', 'auth/logout', method: :get %>

Was this helpful?

/

checkpoint.header

選択されるとユーザーを/auth/logoutエンドポイントにリダイレクトするボタンを、アプリケーションに追加します。Auth0にリダイレクトされた後即座にアプリケーションに戻り、ログインした状態ではないことを確認します。

9

ユーザープロファイル情報を表示する

ユーザーのプロファイルを表示するには、アプリケーションに保護されたルートがなければなりません。ルートへのアクセスはConcernで管理でき、複数のコントローラーで共有できます。Concernはユーザーが認証されていない場合、自動的にAuth0にリダイレクトしなければなりません。そうでない場合は、Concernは現在のユーザープロファイルを返します。

Concernができたら、ログインユーザーを必要とするすべてのコントローラーに含めます。その後、次の例のように、session[:userinfo]セッションからユーザーにアクセスできます:

class DashboardController < ApplicationController
include Secured
def show
@user = session[:userinfo]

end
end

Was this helpful?

/

ユーザーがセッションから読み込まれたら、フロントエンドで情報を表示するために使います:

<div>
<p>Normalized User Profile:<%= JSON.pretty_generate(@user[:info])%></p>
<p>Full User Profile:<%= JSON.pretty_generate(@user[:extra][:raw_info])%></p>
</div>

Was this helpful?

/

checkpoint.header

Secured concernをアプリに追加してから、認証されたユーザーがアクセスするために必要なコントローラーに含めます。 認証されたユーザーがこのコントローラー内でアクションにアクセスでき、認証されていないユーザーは認証のためにAuth0にリダイレクトされることを確認します。

Next Steps

Excellent work! If you made it this far, you should now have login, logout, and user profile information running in your application.

This concludes our quickstart tutorial, but there is so much more to explore. To learn more about what you can do with Auth0, check out:

Did it work?

Any suggestion or typo?

Edit on GitHub
Sign Up

Sign up for an or to your existing account to integrate directly with your own tenant.