こんにちは、hachi8833です。
Railsの認証用gemの定番中の定番であるDevise gemのHow-To Wiki目次のうち、「ワークフローのカスタマイズ」の章見出しを日本語化し、概要や用途を付けました。今後も随時更新します。
Devise How-To原文は走り書きの傾向があり、見出しが内容を適切に表していなかったり、メモ程度の記述しかないことがあります。しかも記事を開いてみないと更新日がわからないので、こういうのが自分でも欲しかったのでした。
もくじリンク
- 「ワークフローのカスタマイズ」(本記事)
- 「認証方法のカスタマイズ」「OmniAuth」
- 「ビュー/コンテンツのカスタマイズ」「特権/認証」
- 「テスト」「特殊な設定」
- 「アプリでのその他の設定」「JavaScript」
- 「他の認証プラグインからの移行」「アップグレード」
Devise How-To: ワークフローのカスタマイズ
※以下は新しい順に並べ替えてあります。
ゲストユーザーを作成する
- 17 May 2017 · 32 revisions
- How To: Create a guest user
ゲストのUserオブジェクトを使って、ログインしていない一般ユーザーでもセッションを管理できるようにする方法です。ここではゲストのオブジェクトを作成してidをsession[:guest_user_id]
でデータベースに保存し、current_or_guest_user
でゲストかどうかを判定します。
パスワード変更をユーザーにメール通知する
- 12 Apr 2017 · 7 revisions
- Notify users via email when their passwords change
この機能はDevise 3.5.3からありますが、デフォルトではオフになっています。devise.rbで設定を変更するだけで機能を有効にできます。
サインイン・サインアウト・サインアップ・プロファイル更新後に元のページにリダイレクトする
- 27 Mar 2017 · 35 revisions
- How To: Redirect back to current page after sign in, sign out, sign up, update
ユーザーがアカウント操作を行った後、ユーザーが元いたページにリダイレクトされるようにします。
Deviseでカスタムのメールバリデータを使う
- 24 Feb 2017 · 6 revisions
- How to: Use a custom email validator with Devise
メールバリデータのコード例が掲載されています。カスタムメールバリデータはDeviseを改変しなくても使えます。
Devise自身のメールバリデータはあえてメールアドレスを極力リジェクトしない方針なので、入力されたメールアドレスが誤っているとユーザーに配信されない可能性もあります(メール配信側の問題による可能性もあります)。
セッション終了(サインアウト)後のリダイレクト先をカスタマイズする
- 17 Feb 2017 · 8 revisions
- How To: Change the redirect path after destroying a session i.e. signing out
ユーザーがログアウトした後に特定のページにリダイレクトする方法です。モデルのインスタンスが複数ある場合の方法も紹介されています。
ユーザーが自分のパスワードを変更できるようにする
- 10 Jan 2017 · 48 revisions
- How To: Allow users to edit their password
ビューだけで行う方法(新しいDeviseとStrong ParametersではApplicationControllerの変更も必要)、既存ユーザーにのみパスワード変更を許可してユーザー登録機能を無効にする方法、Deviseに手を加えずにパスワードの変更方法を独自実装する方法が紹介されています。
サインアップ(登録)に成功したら特定のページにリダイレクトする
- 13 Dec 2016 · 13 revisions
- How To: Redirect to a specific page on successful sign up (registration)
「Rails 5 + Devise 4.2ではこの方法で動かなかったのでこのエントリは削除する方がよいのではないか」という指摘があります。最終的に「サインイン・サインアウト・サインアップ後に元のページにリダイレクトする」(←注意: How-Toの目次にはエントリがありません)でできたそうです。
sign_inとsign_outのデフォルトルーティングを変更する
- 5 Nov 2016 · 7 revisions
- sign_inとsign_outのデフォルトルーティングを変更する(原文)
Deviseのデフォルトルーティング(/users/sign_in
や/users/sign_out
)を/login
や/logout
などに変更する方法です。
サインイン/アウトに成功したら特定のページにリダイレクトする
- 2 Sep 2016 · 14 revisions
- How To: Redirect to a specific page on successful sign in out
ApplicationControllerでafter_sign_in_path_for
ヘルパーやafter_sign_out_path_for
ヘルパーを使ってリダイレクトします。サインイン後にユーザーを元のページにリダイレクトするには、request.fullpath
を使うのが簡単です。サインアウト後のリダイレクト先は自由に設定できますが、サインイン後のリダイレクト先はそうではありません。
サインイン/サインアウト時に特定のページにリダイレクトする
- 2 Sep 2016 · 14 revisions
- How To: Redirect to a specific page on successful sign in out
ログイン後やログアウト後のリダイレクト先を特定のページに変更する方法です。
デフォルトのSign_up登録パスをカスタムパスに変更する
- 20 Aug 2016 · 5 revisions
- デフォルトのSign_up登録パスをカスタムパスに変更する(原文)
新規ユーザーの登録(=サインアップ)URLをDeviseデフォルトの/users/sign_up
から/sign_up
などに変更する方法です。
管理者がアカウントを有効にするまでsign_in
できないようにする
- 18 Aug 2016 · 17 revisions
- How To: Require admin to activate account before sign_in"
confirmableモジュールを使わず、管理者(モデレーター: moderator)が承認するまでユーザーのアカウントを有効にしないようにする方法です。
Deviseで単一ユーザーシステムを構築する
- 10 Aug 2016 · 10 revisions
- How To: Set up devise as a single user system
個人ブログアプリなど、ユーザーが1人に限定されたプライベートアプリをDeviseで構築する際に、新規ユーザー登録ページを非公開にする方法です。ユーザーが1人も登録されていない状態で一般ユーザーが登録ページにアクセスしようとするとトップにリダイレクトされ、ユーザーが1人登録済みの場合はsign_in
ページにリダイレクトされます。
確認をオーバーライドして、確認中にユーザーが独自のパスワードを選べるようにする
- 1 Jul 2016 · 73 revisions
- How To: Override confirmations so users can pick their own passwords as part of confirmation activation
ユーザー名かメールアドレスだけを入力すればアカウントを作れるアプリで、ユーザーが自分に送信された登録確認メールのリンクをクリックすると、アプリの登録確認画面でユーザーが自分の使いたいパスワードを選択できるようにする方法です。以下の場合について詳細な手順が記載されています。
- Rails 3/4、Devise 3.1〜3.5.1
- Rails 3/4、Devise 2.x〜3.0、Devise 3.5.2以降
- Rails 2.3、Devise 1.0.9
サインインに成功したら特定のページにリダイレクトする
- 15 Jun 2016 · 21 revisions
- How To: redirect to a specific page on successful sign in
ログイン後に直前のページに戻る方法、OAuthでログイン後に直前のページに戻る方法、OAuthでログインできなかった場合に直前のページに戻る方法、リダイレクトのループを防ぐ方法が紹介されています。
2段階認証
- 11 Jun 2016 · 2 revisions
- How To: Two step confirmation
以下の2つの記事への内部リンクのみです。具体的な手法は記載されていません。
- How To: Override confirmations so users can pick their own passwords as part of confirmation activation(確認をオーバーライドして、確認中にユーザーが独自のパスワードを選べるようにする)
-
How To: Email only sign up(メールアドレスだけでユーザー登録を開始できるようにする)
アカウント削除後のUserデータを保存する(論理削除)
- 11 Feb 2016 · 6 revisions
- How to: Soft delete a user when user deletes account
ユーザーがアカウントを削除してもユーザーのデータを実際には消さずに保存しておき、単にアカウントを無効にする方法です。
全ページで認証を必須にする
- 16 Jan 2016 · 6 revisions
- How To: Require authentication for all pages
全ページで認証を必須にし、かつアプリのルートで「サインインが必要です」メッセージを表示しないようにします。database_authenticatable
なしでomniauthable
を使う場合は方法が少し異なります。
ユーザープロファイル編集後のリダイレクトをカスタマイズする
- 5 Apr 2015 · 11 revisions
- How To: Customize the redirect after a user edits their profile
ユーザーが自分のプロファイルを変更した後に特定のページにリダイレクトする方法です。Devise::RegistrationsController
のサブクラスを作る方法と、ルーティングだけで行う方法の2つが紹介されています。
ローカライズされたスコープでOmniAuthを使う
- 18 Mar 2015 · 4 revisions
- How To: OmniAuth inside localized scope
セッションで設定されているロケールのスコープに沿ってOmniAuthで認証する方法です。
ユーザーを認証できなかった場合に特定のページにリダイレクトする
- 16 Mar 2015 · 17 revisions
- How To: Redirect to a specific page when the user can not be authenticated
特定のサブドメインでフルパスのURLを使った例が紹介されています。DeviseはデフォルトではフルパスのURLを使わないため、Devise::FailureApp
を継承したカスタムfailure appでフルパスのURLに対応しています。Rails 3と4、Rails 2のサンプルコードがあります。
認証失敗後のリダイレクトにロケールを適用する
- 18 Feb 2015 · 5 revisions
- How To: Redirect with locale after authentication failure
認証失敗後のリダイレクト先ページをロケールに応じて変える方法です。Railsのi18n APIに記載されている方法とは異なります。
パスワードの最小文字数をカスタマイズする
- 1 Oct 2014 · 1 revision
- Customize minimum password length
アプリ全体での設定方法と、モデルごとに最小文字数を設定する方法が紹介されています。
セッションタイムアウト後にログインページにリダイレクトしないようにする
- 23 Jul 2014 · 8 revisions
- How To: Do not redirect to login page after session timeout
デフォルトのDeviseではセッションタイムアウト後にユーザーをログインページにリダイレクトするので、Devise::FailureApp
を継承したカスタムfailure appで動作を変更します。
ユーザーのパスワードを自動生成する(シンプルな登録方法)
- 28 Jan 2014 · 3 revisions
- ユーザーのパスワードを自動生成する(シンプルな登録方法)(原文)
新規ユーザーにメールアドレスだけを入力させ、パスワードを自動生成してメール送信する方法です。
サインインおよびサインアウトに成功したら特定のページにリダイレクトする
- 15 Jun 2013 · 2 revisions
- How To: Redirect to a specific page on successful sign in and sign out
ApplicationControllerに#after_sign_in_path_for
や#after_sign_out_path_for
を定義してリダイレクトする方法と、ログアウト後にリダイレクトしないようにする方法です。
サインイン成功時、またはサインアウト成功時に特定のページにリダイレクトする
- 15 Jun 2013 · 2 revisions
- How To: Redirect to a specific page on successful sign in and sign out
Deviseのデフォルトであるroot_path
へのリダイレクトをモデル名_root_path
で変更できます。ルートURL /
にアクセスした一般ユーザーを単にログインページにリダイレクトしたい場合は、#authenticated
というルーティングヘルパーメソッドを使うのが簡単です。
Rails 4以後は名前の同じルーティングが2つあるとアプリ読み込み時に例外が発生しますので注意が必要です。authenticated_root_path
とroot_path
は異なるルーティング名ですが同じURLに応答します。
ユーザー登録ページへのルーティングをカスタマイズする
- Aug 2012 · 2 revisions
- ユーザー登録ページへのルーティングをカスタマイズする(原文)
Deviseのユーザーモデルが2つある場合にそれぞれについてsign_up
やsign_in
を設定する方法です。
サインアウトに成功したらHTTPSからHTTPにリダイレクトする
- 13 Jun 2012 · 1 revision
- How To: redirect from HTTPS to HTTP on successful sign out
ログイン中はアプリへのアクセスをHTTPSにし、ログアウトしたらHTTPに戻す方法です。
補足
- 原文ではsign inとlog in、sign outとlog outがそれぞれ同じ意味で使われています。訳文では、紛らわしくなる場合を除き、原則として原文に沿ったカタカナを使用します。
- 同じ手順が複数のカテゴリに含まれていることもあります(原文に従っています)
- 原文が更新されていることにお気づきの場合は、ぜひ@hachi8833までお知らせください。更新いたします。
関連記事(Devise)
- Rails4: 古いdeviseのパスワードを新しいdeviseで使う方法
- Rails 3.1.0.rc8にしようとしたらdeviseが違うバージョンのbcryptに依存していてアップデートできない
- [Rails 3] deviseで使うモデルにfind_by_で始まる名前のscopeを定義するとrake db:migrate:resetが通らない
- [Rails 3] 失敗しないmigrationを書こう
- [Rails 3] Appサーバが複数だとdevise_openid_authenticatableで認証できない