0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

deviseを活用してメールでユーザー認証をしたい話

Posted at

Why?

deviseでメールでの認証をしようとしたら、開発環境では Letter Opener で簡単に見れたけど、本番環境では使えない。何を設定しなきゃいけないんだ?
という初心者が頑張ってメールを送れるように色々設定した備忘録となっています。

実施するうえでカスタムドメインにしている前提なので未だの方はこちらの備忘録もご参考になれば。
カスタムドメイン適応の話

devise

ユーザーの新規登録からログイン、ログアウト、ユーザー情報のあれこれがこれさえあれば一通りそろうgem。ひとまず入れてカスタマイズしながら使っています。
devisev の github

SMTPサービス とは?

SMTP は Simple Mail Transfer Protocol の略らしい。
インターネット上で E メールメッセージを送受信するために使用される通信プロトコル。
詳しいところはこちらが分かりやすいので読んでみてください。

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

そんなこんなでEメールを送るためのサーバーが無いとダメだということらしい。

今回使わせて頂いたサービス

  • heroku (デプロイ環境)
  • mailjet (メール送信)
  • cloudflare (DNS管理)

送信用のカスタムアドレスを作成する。

アプリからのメールであることを受け取り手に伝えるように送信用のカスタムアドレスを作成。cloudflare の Email Routingでカスタムアドレスを作成する。

  • Outlookで新規メールアドレスを作成(メールアドレスを何で作成するかはご自由に)

  • cloudflareにログイン

  • メールアドレスのEmail Routing → カスタムアドレス

  • カスタムアドレスを作成
    カスタムアドレスを作成

    • カスタムアドレス → 追加したいアドレスを記入
    • アクション → メールに送信
    • 宛先 → Outlookで作成したメールアドレス
  • 保存

  • cloudflareからメールが送られてくるのでメールのリンクからメールアドレスの確認をする。

これでカスタムアドレスの準備はok

maijetのアカウント作成

まずはアカウント作成。
アプリごとにアカウントを作成しておくと管理がしやすい気がする。
ただアカウントを分けていることを忘れると設定で嵌る。(実体験)

maijetのAPIキーの取得

  • welcome GuideDeveloperからCreate API Key
  • APIキーSECRETKEYをメモするかどっかに保存しておく

maijetにドメイン関係の設定をしていく

welcome GuideMarketerからSet up domain
このページを起点に設定をしていく。

ドメイン名の設定

  • Domains and sendersDomainsにあるAdd domainを選択
    add a neu domain
    • Domain → 作成したアプリのドメイン名
    • Label → わかりやすいラベル ~officialとか
  • 追加
  • 追加した後ドメイン検証用のDNS設定が表示されたと思うので、それをCloudflareに登録するしてから確認ボタンを押す。(といけたと思うけどちょっと忘れた。)

メール送信に使うアドレスの設定

mailjetに送信で使うアドレスを前もって登録しておかなければならないので、送信用のカスタムアドレスをここに登録。

  • Domains and sendersSender addressesにあるAdd a sender addressを選択
    (先ほどのドメイン名を設定した下側)
    add a sender address
    • Label → わかりやすいラベル
    • Email → 先ほどcloudflareで設定したカスタムアドレス
    • 用途 → 認識に使うのであれば一番上
  • 追加
  • mailjetからメールが届くのでメールのリンクActivate nowでアクティブにする

これで追加完了

SPF/DKIM認証の設定

  • SPF/DKIM Aurhenticationの下のドメインの右端にある歯車からSetup SPF/DKIM Authenticationを選択
  • それぞれのsetup用のDNS設定がで表示されるのでこれらをCloudflareに設定
  • SPF/DKIM Aurhenticationに戻ってどちらもokになっていれば完了

ここまで来たら大方mailjetでの設定は終了。
次はRails側。

deviseのmodelを修正

注意
deviseはすでに入れてあってマイグレーションとか終了しているという前提で話しています。
まだの方はこちらの記事がとても参考になったので活用して実装してください。
[Rails] deviseの使い方(rails5版)

confirmableを有効にする。
以下一部抜粋

diff_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, :timeoutable

mailjetのgemを入れる

gem "mailjet"

入れるときgroupに入れると開発環境でエラーが出た気がするから入れない方がいいかも。

  • bundle installでインストール

Railsの設定

  • config/environments/production.rbに以下の設定を追加
config/environments/production.rb
config.action_mailer.delivery_method = :mailjet
config.action_mailer.default_url_options = { host: "カスタムドメイン名", protocol: "https" }
  • config/initializers/mailjet.rbを作成し以下を設定
config/initializers/mailjet.rb
Mailjet.configure do |config|
  config.api_key = ENV["MAILJET_API_KEY"] 
  config.secret_key = ENV["MAILJET_SECRET_KEY"]
  config.default_from = "info@syn-on.com"
  config.api_version = "v3.1"
end
  • .envを作成し、以下を追加
.env
# MailJet
MAILJET_API_KEY = 'mailjetで取得したAPIキー'
MAILJET_SECRET_KEY = 'mailjetで取得したシークレットキー'

注意
一応.gitignore.envが対象になっていることを確認しておくと安心。
このファイルに記載してあるファイルはgithubには表示されない。

.gitignore
# Ignore all environment files (except templates).
/.env*
!/.env*.erb
  • config/initializers/devise.rbDevise.setup do |cinfig|の中に以下の設定を追加
config/initializers/devise.rb
Devise.setup do |config|
  
  config.mailer_sender = "送信用のカスタムアドレス"
  config.mailer = "Devise::Mailer"
  
end

ここまでくれば後はHerokuだけ。

Herokuの設定

HerokuのアプリのSettingsから、Config VarsにAPIキーとシークレットキーを登録する。

Heroku入力フォーム

  • KEY → MAILJET_API_KEY と MAILJET_SECRET_KEY(.envで登録した名前)
  • VALUE → それぞれのキーの値

以上。

終わりに

ここまで読んで頂きありがとうございます。
そんなこんなで送れるようになりましたでしょうか?

この記事は私が実装した後にできるだけ忘れないように書いているのですが、色々模索しながら進めたのでちょっと抜けていたり、余計なことが書いてあるかもしれません。
もし、ここ違くないか?と思うことがありましたらコメント等でご指摘頂けると幸いです。

それではまた。

参照

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?