SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール

Railsでユーザー認証機能を実装しよう~定番のgem「devise」活用法(2)

これだけは押さえておきたい!Rails開発で使えるgemパッケージ/ツール 第2回


ユーザー登録/ログアウト/ログイン動作確認(2)

 続いてRecoverableモジュールによるパスワードリセット機能も有効になっていることを確認します。ログイン画面の[Forgot your password?]リンクをクリックすると以下のようにEmailを入力するフォームが表示されます。

パスワードリセットページ
パスワードリセットページ

 ユーザー登録時に使用したEmail(test@test.com)を入力し[Send me reset password instructions]ボタンをクリックするとログインページ(/users/sign_in)に遷移し、「You will receive an email with instructions on how to reset your password in a few minutes.」とflashメッセージが表示されます。

パスワードリセット後の表示
パスワードリセット後の表示

 アプリケーションログにメール送信処理が出力されているので、rails sで起動したコンソールを確認するか、log/development.logファイルを確認します。以下のように出力されます。

[リスト 6]log/development.log
Devise::Mailer#reset_password_instructions: processed outbound mail in 242.9ms
Sent mail to test@test.com (11.4ms)
…(中略)…
<p>Hello test@test.com!</p>

<p>Someone has requested a link to change your password. You can do this through the link below.</p>

<p><a href="http://localhost:3000/users/password/edit?reset_password_token=mH3xZbupQK7ev4whLjwf">Change my password</a></p>

<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>

 [Change my password]リンクのタグに指定されているURL(ここでは「http://localhost:3000/users/password/edit?reset_password_token=mH3xZbupQK7ev4whLjwf」)にアクセスすると、以下のようにパスワード変更ページが表示されます。

パスワード変更ページ
パスワード変更ページ

 新しいパスワードを正しく入力して[Change my password]ボタンをクリックすると、ログインしてトップページに遷移し、「Your password has been changed successfully. You are now signed in.」とflashメッセージが表示されます。

パスワード変更後のトップページ
パスワード変更後のトップページ

 なお、ログイン時の情報を保存するTrackableモジュールが有効になっていることは、データベースにアクセスしてユーザー情報を表示すると、sign_in_count等のカラムにデータが格納されていることから分かります。

bin/rails dbconsole
psql (10.3)
Type "help" for help.

devise_sample_development=# select sign_in_count, current_sign_in_at, last_sign_in_at, current_sign_in_ip, last_sign_in_ip
devise_sample_development-# from users where email = 'test@test.com';
 sign_in_count |     current_sign_in_at     |      last_sign_in_at       | current_sign_in_ip | last_sign_in_ip
---------------+----------------------------+----------------------------+--------------------+-----------------
             4 | 2018-04-23 07:39:32.041131 | 2018-04-23 07:35:46.022133 | 127.0.0.1          | 127.0.0.1
(1 row)

まとめ

 ここまで、deviseにおける基本的な機能の概要を確認するとともに、実際にdeviseをRailsアプリにインストールしてデフォルトの機能を中心に実装と動作確認を行いました。Railsチュートリアルなどの実装と異なり、ほとんどプロダクトのコードを記述することなくユーザー認証機能を追加できます。

 さらに、deviseの動作を確認することで、Rails enginesの強力な機能を体感することができます。一方でdeviseはRailsと密結合とも言われ、デフォルトの動作をカスタマイズしようとするとハマりどころも少なくないので注意が必要です。

 よりシンプルでRailsと疎結合なsorceryというgemもありますが、素早くユーザー認証機能をRailsで実装するにはdeviseが一番手軽と言えます。

 次回は、SNS認証で定番gemであるOmniauthを紹介する予定です。deviseとの連携してSNS認証機能を実装していきます。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
これだけは押さえておきたい! Rails開発で使えるgemパッケージ/ツール連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 竹馬 力(チクバ ツトム)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10899 2018/07/05 11:41

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー