update.Authlogicというgemを使ってRailsに認証の仕組みを作る方法を紹介します。Authlogicはシンプルなライブラリで、Deviseのようにviewやcontrollerは提供してくれません。自分でマイグレーションファイルを作って、コントローラと認証画面を用意してあげる必要があります。面倒くさそうに感じますが、自分で作りたいようにRailsに乗って作れるという良さがあります。Railsで認可の仕組みをシンプルに作るを参考にしてみてください。3.5紹介する実装例メールアクチベーションパスワードリセットWebAPIキーテストコード最低限の実装まずは単純にユーザ登録とログインの実装をしてみます。マイグレーションユーザ認証に必要なカラムを追加します。認証させたいモデルが存在しない場合は作ります。今回はUserモデルを作ることにします。persistence_tokenログイン情報などの記録もしたい場合は下記のようにマイグレーションファイルを手動で修正してください。これらのフィールドはAuthlogicが自動でアップデートしてくれます。endendAuthlogicをモデルに適用app/models/user.rbUserモデルにAuthlogicを適用します。ブロックでオプションを渡せます。暗号アルゴリズムを変更したい場合。app/models/user_session.rb認証のセッションで使うモデルファイルを作成します。継承するクラスファイルです。trueendここでいくつかのオプションを設定できます。例はプロダクション環境ではCookieにsecure属性を付けて、どの環境でもhttponly属性を付ける設定になっています。これ以外の設定はドキュメントを参照してください。Authlogic::Session::Cookies::Configユーザ登録ページapp/controllers/users/registrations_controller.rbパット見て普通のRailsで作るようなcontrollerと同じです。誰でも分かるし、変更もしやすい。endend以上でユーザ登録の画面ができました。バリデーションはAuthlogicが提供しくれるので、特に何もしなくても大丈夫です。ログイン画面app/controllers/user/sessions_controller.rb次はログイン画面です。こちらも先程の登録と同じような感じです。違いはUserSessionクラスにパラメータを投げるだけです。いうメソッドは後でApplicationControllerに定義します。メソッドと同様のことができると便利なので作ります。UserSessionクラスに問い合わせるといまアクセスしているユーザのCookieを読み取ってセッション情報を作ってくれます。その中にUserモデルのオブジェクトが入っているので、それを返しているだけです。比較しています(モデル名によってCookieKeyは変わる)。探して一致すれば認証という流れになっている。authlogic/session/cookies.rb以上で、ユーザ認証の実装は終了です。ソースコードだけで見ると面倒くさそう...って思うかもしれませんが、やってみると普段Railsで開発しているのとさほど変わらない程度の実装です。見えないところが少ないのでコントロールしやすいです。クラスがユーザのステータスを管理する機能を提供しています。問い合わせることができます。メールでのアクチベーションを実装する場合や、運営側からの承認フラグを実装したいときなどに利用します。DBにフィールドが必要なので、使いたい場合はマイグレーションファイルを作成します。falseこれらフィールドのどれかがfalseだとAuthlogicでログインを拒否する動作になっています。自前で管理する必要はありません。メールアクチベーションメールアドレスの存在確認をするために、本登録用メールを送信して記載されているURLにアクセスするとアカウントを有効化したい場合があります。それも割りとサクッと実装できます。フィールドを利用します。いうフィールドを利用するので、こちらも追加します。比較して該当ユーザが指定期間以内に作られたかどうか(updated_atフィールド)を判断しています。トークンの有効期限みたいな感じですね。elseapp/models/user.rb認証メール送信メソッドと、アクチベーションするメソッドを定義します。フィールドの値を見て行うので、トークンを付与したURLをメールで送付します。パスワード再設定用にも利用します。付きのリセットURLを送付します。そのURLにアクセスすると、新しいパスワードが設定できるようにする感じにします。app/controllers/user/password_resets_controller.rbメールアドレスを入力する画面と、パスワードを再設定する画面が必要なのでそれぞれのアクションを作ります。呼んで強制的にperishable_tokenを更新します。これをしないとURLが流出してしまった時に好きなようにパスワードを変えられてしまいます。ちなみにAuthlogicはデフォルトでサインイン・アウト時にperishable_tokenを更新します。endWebAPIキーユーザ情報にアクセスするようなWebAPIを開発した時に認証が必要になりますが、意外と面倒です。tokenを利用できます。フィールドを利用するので作ります。オプションを渡せば完了です。:api_keyendこれで以下のようなURLでログイン済み扱いとして振る舞えます。http://example.com/secret?user_credentials=znEke01EDYwmeTQGXbtNテストコード認証周りは不安要素が多いのでテストしておきたいですよね。今回はリクエストテストを書くことにしました。認証ロジック自体はAuthlogicでテストされているので、利用者側としては自分で実装したログイン画面をテストする方針にします。Rail5からコントローラテストよりもリクエストテストを推奨しているので、コントローラテストは書きません。今回はRSpecとFactoryGirlを使います。単純にログイン画面にIDとパスワードをPOSTすればいいので下記のように書きます。create(:user)そしてログインできるできないのテストを書いてみます。endend以上です。提供していることがシンプルなので理解もしやすく使いやすいと思います。upLoginユーザーは見つかりませんでした。