4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】Devise+Letter_openerでメール認証機能の実装手順

Last updated at Posted at 2019-10-27

目的

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 }
2.rootの設定をする
config/routes.rb
Rails.application.routes.draw do
  root "home#index"
end
3. フラッシュメッセージの設定をする
app/views/layouts/application.html.erb
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
4. viewsファイルを生成する
terminal
$ rails g devise:views
Screen Shot 2019-10-27 at 17.46.18.png

以上のセッティングを完了したら、先ほど生成した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 Screen Shot 2019-10-27 at 18.46.53.png 確認オッケーです!

参考文献

https://github.com/plataformatec/devise
https://github.com/fgrehm/letter_opener_web

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?