目的
Deviseのconfirmableを使って、ユーザー新規登録時メール認証機能を実装します。
環境
Ruby 2.6.5
Rails 5.2.3
Devise 4.7.1
letter_opener_web 1.0
Devise + Letter opener 実装手順
Deviseをインストールする
Gemfile
gem 'devise', '~> 4.7', '>= 4.7.1'
terminal
$ bundle install
$ rails g devise:install
create config/initializers/devise.rb
create config/locales/devise.en.yml
ターミナルのステップによる、以下4つのセッティングの確認が必要です。(クリックで展開)
1. メールの設定をするconfig/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config/routes.rb
Rails.application.routes.draw do
root "home#index"
end
app/views/layouts/application.html.erb
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
terminal
$ rails g devise:views
![Screen Shot 2019-10-27 at 17.46.18.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F519582%2F9d9a9383-f2cb-62aa-2893-5afcb3112065.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=cb5e7bc7491b4a0ac22f6f4f4f6e8507)
以上のセッティングを完了したら、先ほど生成したdevise.rb
でconfig.mailer_senderの内容を編集しましょう。
config/initializers/devise.rb
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class
# with default "from" parameter.
config.mailer_sender = 'chimeiwang@example.com'
モデルを作成する
rails generate devise <MODEL>
でモデルを作成します。
terminal
$ rails g devise User
invoke active_record
create db/migrate/20191027084057_devise_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
insert app/models/user.rb
route devise_for :users
そして、confirmableの機能を追加します。
app/models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :confirmable
end
マイグレーションファイルを編集する
マイグレイトする前にconfirmableのコメントアウトを外します。
db/migrate/xxxxxxxxxxx_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
#略
## Confirmable
t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at
t.string :unconfirmed_email # Only if using reconfirmable
#略
end
#略
add_index :users, :confirmation_token, unique: true
#略
end
end
terminal
$ rails db:migrate
念のために、schemaを確認しましょう。
db/schema.rb
ActiveRecord::Schema.define(version: 2019_10_27_084057) do
create_table "users", force: :cascade do |t|
#略
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
#略
end
end
letter_opener_web をインストールする
Gemfile
group :development do
gem 'letter_opener_web', '~> 1.0'
end
terminal
$ bundle install
config/routes.rb
Your::Application.routes.draw do
mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
#略
end
config/environments/development.rb
config.action_mailer.delivery_method = :letter_opener_web
これで、設定完了です。もう一度サーバーを起動して動作を確認します。
確認
![Screen Shot 2019-10-27 at 18.46.01.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F519582%2F60a52a24-928a-7e87-c15e-90a81cedc3da.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=222433d834d0db767b043a47bf8a4840)
![Screen Shot 2019-10-27 at 18.46.53.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F519582%2F23c9b97a-079b-590a-447e-d2ffdc65c5d3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ab1f7465865bc0ec5baf8b99064c9c7b)
参考文献
https://github.com/plataformatec/devise
https://github.com/fgrehm/letter_opener_web