deviseとは
Rubyのgemで、ログイン機能を簡単に実装出来るようにしてくれます。ログイン機能を実装するためには本来、登録するユーザーのモデルを作って、保存するパスワードを暗号化したり、パスワードを再設定する機能を実装して、ユーザーを記憶するためのトークンを生成したりと様々な要素を実装する必要があります。
devise gemを使えばログインに必要な機能を提供してくれるだけでなく、ユーザーの認証やパスワードの保存というセキュリティ的に問題のある実装が許されない部分でセキュリティの安全性を保証してくれます。
devise導入の手順
まずGemfileに、
gem 'devise'
を追加してbundle installを実行してdeviseをインストールします。
rails g devise:install
を実行してdeviseの必要なファイルをインストールします。すると以下のようなメッセージが表示されます。
=============================================================
Some setup you must do manually if you haven't yet:
1 Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
In production, :host should be set to the actual host of your application.
2 Ensure you have defined root_url to something in your config/routes.rb.
For example:
root to: "home#index"
3 Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
`
<%= notice %>
<%= alert %>
`4 You can copy Devise views (for customization) to your app by running:
rails g devise:views
=============================================================
以降、上記のメッセージにしたがってdevise gemの導入を行っていきます。
config/environments/development.rb の末尾に以下を追加します。
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
次にroot to: "home#index"など、任意のルートurlを設定しておいて下さい。
app/views/layouts/application.html.erb ファイルに以下を追加してユーザー登録、ログインのエラーメッセージなどを表示するためのエリアを作ります。
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
最後に、
rails g devise:views
のコマンドを実行すると、ユーザー登録やログイン画面、パスワード再設定画面などのユーザー登録やログインに必要な画面のテンプレートが作成されます。
rails g devise:install
を実行した時のセットアップメッセージの手順は全て完了になります。しかしまだdeviseを使用してユーザー登録をするためのモデルが存在しないので作成します。
rails g devise User
というコマンドを実行してUserモデルを作成します。その後rails db:migrateコマンドを実行してhttp://localhost:3000/users/sign_up
にアクセスすると、以下のような画面が表示されてdeviseの導入完了になります。