Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

RailsでClearanceを使った認証機能の実装方法

Clearanceは、Thoughtbotチームによって開発された、メールアドレスとパスワードによるシンプルな認証システムです。独自のデフォルト設定を持っていますが、必要に応じて簡単に上書きできるよう設計されています。また、現在も活発にメンテナンスされており、GitHubで最新の動向を確認できます。

本チュートリアルでは、RailsアプリケーションにClearanceを統合する手順を解説します。小規模なサンプルアプリケーションを作りながら進めていきましょう。それでは始めます!

はじめに

まずはRailsアプリケーションを生成します。このチュートリアルでは、アプリ名をtutsplus-clearanceとします。

これでアプリの雛形が完成しました。

次に、アプリの見た目を整えるためにBootstrapを導入します。GemfileにBootstrapのgemを追加しましょう。

以下のコマンドでgemをインストールします。

bundle install

続いて、application.scssを以下のように編集してください。

Clearanceのセットアップ

Gemfileを開いて、Clearanceのgemを追加します。

gemをインストールしたら、ジェネレータコマンドを実行してClearanceをインストールします。

bundle install

rails generate clearance:install

コマンドを実行すると、ターミナルに以下のような出力が表示されます。

コマンドを実行すると、アプリ内にいくつかのファイルが生成されます。そのひとつがconfig/initializersディレクトリにあるclearance.rbです。また、Userモデルも生成され、同時に以下のようなマイグレーションファイルも作成されます。

出力内容に従い、まずは環境設定ファイルを編集しましょう。config/environments/development.rbを開き、endの直前に以下の行を追加します。

次に、config/initializers/clearance.rbを開き、送信元メールアドレスをデフォルトから任意のものに変更します。ファイルを開くと、以下のような記述が確認できます。

デフォルト設定を上書きしたい場合は、以下のコードスニペットを貼り付けて、自分の要件に合わせて設定を変更できます。

データベースをマイグレーションするコマンドを実行します。

rake db:migrate

PagesControllerを開き、indexアクションを追加しましょう。

次に、先ほど作成したindexアクション用のビューを作成します。

以下のコードを追加してください。

ルーティングを以下のように編集します。

続いて、layoutsディレクトリ内に_navigation.html.erbというパーシャルを作成します。これは、アプリのナビゲーション関連の処理をまとめるために使用します。

以下のコードを貼り付けて保存してください。

アクセス制限

Clearanceを使えば、アプリ内の特定ページへのアクセスを制限することができます。具体的な実装方法を見ていきましょう。

app/views/pagesディレクトリに、newアクション用のビューとしてnew.html.erbというファイルを作成し、以下のコードを貼り付けます。

次に、config/routes.rbに以下の行を追加します。

最後に、PagesControllerを以下のように編集します。

上記のコードでは、Clearanceが提供するヘルパーrequire_loginを使用して、newアクションへのアクセスを制限しています。動作を確認するには、ターミナルでrails serverを実行してRailsサーバーを起動し、ブラウザでhttps://locahost:3000/pages/newにアクセスしてみてください。サインインページへリダイレクトされるはずです。

さらに、Clearanceにはアクセス制御に使えるルーティング制約も用意されています。

上記のコードでは、認証済みユーザー向けに別のルートが定義されています。

Clearanceのデフォルト設定を上書きする

Clearanceを使い始めると、見えないところでさまざまな処理が自動的に行われます。アプリの仕様によっては、これらを独自にカスタマイズしたくなる場面もあるでしょう。Clearanceでは、デフォルトの設定を自由に上書きできます。

Clearanceのルートを上書き(または生成)するには、ターミナルで以下のコマンドを実行します。

rails generate clearance:routes

すると、ルーティングファイルは以下のようになります。

このコマンドを実行すると、config/initializers/clearance.rb内のconfig.routes設定がfalseに変更されます。これにより、新しく生成されたカスタムファイルが使用されるようになります。

ビューを生成して編集可能にするには、以下のコマンドを実行します。

rails generate clearance:views

生成される主なファイルは以下の通りです。

ターミナルに、app/views/layouts/application.html.erbファイルを上書きするかどうかを尋ねるプロンプトが表示されます。任意のオプションを選択してください。

レイアウト

デフォルトでは、Clearanceはアプリケーションのデフォルトレイアウトを使用します。Clearanceがビューを描画する際に使用するレイアウトを変更したい場合は、イニシャライザでレイアウトを指定するだけでOKです。

ヘルパーメソッド

Clearanceは、controllersviewshelpersで使用できる便利なヘルパーメソッドを提供しています。代表的なものとしては、signed_in?signed_out?current_userなどがあります。使用例は以下の通りです。

まとめ

Clearanceは認証機能に関して多くの機能を提供してくれる強力なツールです。ぜひ次のプロジェクトで試してみてください。さらに詳しく知りたい方は、GitHubページをチェックしてみましょう。

  1. Railsのセキュリティ脅威に立ち向かう:認証と機密データ露出への対策

    本シリーズの第1回では、インジェクション攻撃について解説しました。 OWASP Top 10 Webアプリケーションセキュリティリスクをテーマにした本シリーズの第2回となる今回は、認証の不備と機密データの露出という脅威の世界を深く掘り下げていきます。 具体的には、ハッカーがどれほど簡単にあなたが書いたコードを欺き、ユーザーのデータを盗み出すことができるのか、以下のような攻撃手法を見ていきます。 ユーザー列挙(User Enumeration):ログインページを悪用し、候補となるユーザー名のリストを総当たりで試して、データベース内にそのユーザーが存在するかどうかを確認する攻撃。 弱いパスワード

  2. Rails5でのAngularの使用

    あなたは前にその話を聞いたことがあります。分散型で完全に機能するバックエンドAPIと、通常のツールセットで作成されたフロントエンドで実行されているアプリケーションがすでにあります。 次に、Angularに移動します。または、AngularをRailsプロジェクトと統合する方法を探しているだけかもしれません。これは、この方法を好むためです。私たちはあなたを責めません。 このようなアプローチを使用すると、両方の世界を活用して、たとえばRailsとAngularのどちらの機能を使用してフォーマットするかを決定できます。 構築するもの 心配する必要はありません。このチュートリアルは、この目的のた