お疲れ様です。Ryujiです。
今日は先日より作成しているアプリにdeviseによるユーザ認証を導入したいと思います。
この記事は前回記事の続きとなりますが、タイトルの通り、単独で読んでいただくことが可能です。
Contents
今日やること
- rails generate devise:installを実行する
- 出力の結果をそれぞれ読み解いてみる
- 日本語で理解できるようにする
準備
言わずもがなGemfileに以下記述して、bundle installは実施済みとします。
gem "devise"
rails generate devise:install
いざdevise有効化
$ rails generate devise:install 0 [10:17:23]
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================
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:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
===============================================================================
自動生成ファイル
まずはこの行ですね。
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================
2つのファイルを自動生成してくれているようです、config/initializers/devise.rbはdeviseの設定ファイルです。config/locales/devise.en.ymlはログインに成功した際などのflashメッセージに使用される文字列になっております。
いずれも特段理由がない限り、書き換える必要はないでしょう。
Some setup you must 〜
Some setup you must do manually if you haven't yet:
上記は翻訳すると、
もし、まだ設定していなければ以下のことは手動でやってね!deviseでは自動でやっていないよ!
って言っています。これは重要ですね!見逃してしまうと、設定されないままになってしまいます。
Ensure you have defined default url options 〜
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.
これは何を言っているのでしょうか?頑張って翻訳してみます。
アプリの環境設定ファイルでdefault url optionsを定義していますか?例えばdevelopmentの環境設定ファイルへの記述ならばこうです!
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
production環境ではlocalhost
ではなく、実際のドメインを入力してください。
ドメインというのは、例えばこのブログであれば、ryucoding.comです。
この設定はRailsのAction::Mailerという機能を使用する際に必要なようです。
deviseではユーザがパスワードを忘れた際など、メールを送信して再設定するなど、メールを使用することを想定しています。
そのため、メールを使用する予定がない場合は設定する必要ないでしょう。
Ensure you have defined root_url 〜
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root to: "home#index"
これを翻訳するとこうなります。
config/routes.rbにroot_urlを定義しましたか?例えばこう書きます。root to: "home#index"
これは割とそのままですね!deviseはサインインやログアウトが終了すると、ルートのURLに遷移します。そのルートのURLが上で定義したものになります。
Ensure you have flash messages 〜
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
flashメッセージを実装したいなら例のように記載していることを確認してください。例えば、以下のようです。
<!DOCTYPE html>
<html>
<head>
<title>Worktweet</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</body>
</html>
ここはあまり説明の必要はないでしょう。noticeやalertで呼び出すことができるようですね!
flashメッセージなんて必要ないよ!って人は書かなくていいと思います。
You can copy Devise views 〜
4. You can copy Devise views (for customization) to your app by running:
rails g devise:views
これの翻訳は
rails g devise:viewsコマンドを打てば、deviseが自動生成しているビュー画面をカスタマイズすることができます。
独自のcssを当てたいときやフォームを独自にしたいときは必要となります。
というか利用する場合がほとんどです。コマンド実行しておいて損はないでしょう。
ちなみに、rails g devise:controllersで、deviseが自動生成しているコントローラをカスタマイズできます。
まとめ
今日は、devise installをした際のメッセージ文を読み解いてみました。
数年前の自分はdeviseの存在を知らず、自力でUserテーブルとか作って、パスワードを平打ちしていました。とても危ないですね。
車輪の大発明はしないように、ユーザ認証にはdeviseを積極的に使用していきましょう!
では。