【Rails】Devise+Letter_opener로 메일 인증 기능의 구현 순서

목적



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





이상의 설정을 완료하면, 방금 생성한 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 = '[email protected]'

모델 만들기


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

이것으로 설정이 완료됩니다. 서버를 다시 시작하여 동작을 확인합니다.

확인





확인 오케이입니다!

참고문헌



htps : // 기주 b. 고 m / p
htps : // 기주 b. 이 m / fg 레 hm / ぇ는 r_ 오네 r_ ぇ b

좋은 웹페이지 즐겨찾기