目的
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
以上のセッティングを完了したら、先ほど生成した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
これで、設定完了です。もう一度サーバーを起動して動作を確認します。
確認
確認オッケーです!参考文献
https://github.com/plataformatec/devise
https://github.com/fgrehm/letter_opener_web