Deviseでconfirmableの登録確認メールを受け取れない場合に登録を完了させる方法


概要

Deviseでconfirmable利用時にメールを送信できない、且つ、letter_openerなども使えない場合にどうやって登録を完了させるかを調べたのでメモ

環境

Ruby: 2.4.0
Rails: 5.0.1
Devise: 4.2.0

手順

  • Webの画面でemail, passwordを入力する
  • rails consoleで該当のUserを取得
  • Devise::Models::Confirmable#send_confirmation_instructionsを実行して、Mail objectを取得し、bodyをconsoleに表示させる
  • 本文中のURLをコピーしてブラウザで開く
  • Webの画面で変更するパスワードを入力して、登録を完了させる
> User.find(1).send_confirmation_instructions.body
   (0.2ms)  BEGIN
   (0.2ms)  COMMIT
  Rendering devise/mailer/confirmation_instructions.html.slim
  Rendered devise/mailer/confirmation_instructions.html.slim (0.6ms)
Devise::Mailer#confirmation_instructions: processed outbound mail in 115.8ms
Sent mail to [email protected] (4.1ms)
Date: Thu, 02 Feb 2017 17:36:46 +0900
From: [email protected]
Reply-To: [email protected]
To: [email protected]
Message-ID: <[email protected]>
Subject: xxxxx
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: base64

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

=> #<Mail::Body:0x007fa246f96100
 @boundary=nil,
 @charset=nil,
 @encoding="8bit",
 @epilogue=nil,
 @part_sort_order=["text/plain", "text/enriched", "text/html"],
 @parts=[],
 @preamble=nil,
 @raw_source=
  "<p>ようこそ、[email protected]さん!</p><p>次のリンクでメールアドレスの確認が完了します:</p>
<p>

<a href=\"http://localhost:3000/users/confirmation?confirmation_token=xxxxxxxxxxxxxxxx&amp;locale=ja\">アカウント確認</a>
↑このURLをコピーして、ブラウザで開く
</p>">          

あとがき

letter_openerの素晴らしさを享受していたので使えない環境の場合どうするのか?とか思っていたが、Deviseも良く出来たライブラリだったので、意外と簡単に出来た
が、あまり情報は無かったので、やっぱレアケースなんだなと認識した