deviseを導入して、簡単にユーザー周りの機能を実装していきます。
#1.deviseのインストール
gem 'devise'
Gemfile.lockを削除後、
$ bundle install
$ rails g devise:install
#2.deviseの環境設定。
・開発環境
config.action_mailer.default_url_options = { host: 'localhost:3000', port: 3000 }
・本番環境
config.action_mailer.default_url_options = { :host => 'http://アプリ名.herokuapp.com' }
#3.ルートの設定
・トップページのルートパスを指定
root :to => "top#index"
#4.Userモデルの作成
$ rails g devise User
※ここではrake db:migrateはしません。
#5.Userモデルとマイグレーションファイルを編集
devise :database_authenticate, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email
$ bundle exec rake db:migrate
#6.ビューファイルの作成
$ rails g devise:views
<% if user_signed_in? %>
<li><%= link_to "Logout", destroy_user_session_path, method: :delete %></li>
<% else %>
<li><%= link_to "Login", new_user_session_path %></li>
<% end %>
before_action :authenticate_user!
#7.デバイスの設定を追記。
メール認証の方法は幾つかあります。
Gmailを設定する方法とSendGridを使う方法を実装しました。
ここでは、開発環境ではGmailを、本番環境ではSendGridを設定していきます。
・開発環境(Gmail)
Rails.application.configure do
...
config.action_mailer.default_url_options = { host: 'localhost:3000', port: 3000 }
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:enable_starttls_auto => true,
:address => "smtp.gmail.com",
:port => 587,
:domain => 'smtp.gmail.com',
:user_name => "ご自身のgmailアドレス",
:password => "ご自身のgmailアドレスのパスワード",
:authentication => 'login'
}
end
・本番環境(SendGrid)
herokuのアカウントに登録後、SendGridのアドオンの利用登録(クレジットカードの登録)を済ませます。無料で使う場合も必要です。
アカウント登録 https://signup.heroku.com/identity
クレジットカードの登録 https://dashboard.heroku.com/account/billing
また、herokuのToolbeltをインストールして、herokuコマンドをターミナル上で入力できるようにしておきます。
https://devcenter.heroku.com/articles/getting-started-with-ruby#set-up
その後、ターミナル上でSendGridのアカウントを取得します。
$ heroku login
#ユーザー名とパスワードを入力
$ heroku addons:add sendgrid:starter
SendGridのアカウントが作成されるのでアカウント名とパスワードを表示させます。
$ heroku config:get SENDGRID_USERNAME #アカウント名
$ heroku config:get SENDGRID_PASSWORD #パスワード
上記をもとにdeviseの環境設定を編集します。
Rails.application.configure do
...
config.action_mailer.default_url_options = {host: 'http://アプリ名.herokuapp.com' }
config.action_mailer.raise_delivery_errors = false #この一文も追記!!
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:user_name => "SendGridのアカウント名",
:password => "SendGridのパスワード",
:domain => "heroku.com",
:address => "smtp.sendgrid.net",
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
end
config.assets.initialize_on_precompile = false
必要であれば、送信元の表示設定を行います。
config.mailer_sender = '"アプリ名" <service@example.com>'
#8.動作を確認する。
・開発環境の場合(Gmail)
$ rails s
ローカルサーバーを立ち上げ、ビュー画面からサインアップしてみましょう。
入力したメールアドレスに、Gmailから認証メールが届きます。
※届かない場合は、https://www.google.com/settings/security/lesssecureapps
からGmailの設定を「安全性の低いアプリのアクセス」をオンにしてみてください。(config/environments/development.rbに記述したGmailアカウント)
・本番環境の場合(SendGrid)
herokuにデプロイ後、同じようにサインアップしてください。
$ git push heroku master
$ heroku run rake db:create
$ heroku run rake db:migrate
以上で実装が完了しました。