質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1464閲覧

deviseでemailの暗号化後、ログアウト後、ログインできない

no1knows

総合スコア3365

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/06/27 02:23

編集2019/06/28 02:49

前提・実現したいこと

deviseでActiveSupport::MessageEncryptorを利用してemailの暗号化を実装したのですが、下記の問題を抱えています。

  • ログアウト後、ログインができない (エラーメッセージ:Invalid Email or password.
  • 同じメールアドレスで登録ができる

試したこと

復号すると登録したメールドレスが表示されるので、暗号化はきちんとできていると考えました。

復号するタイミングの問題かと考え、after_find⇒after_initializeにすると、ログイン時にActiveSupport::MessageEncryptor::InvalidMessageが表示されてしまいました。

どうぞよろしくおねがいします。

該当のソースコード

ruby

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 7 before_save :encrypt_value 8 after_find :decrypt_value 9 10 def encrypt_value 11 self.email = encrypt(self.email) 12 end 13 14 def decrypt_value 15 self.email = decrypt(self.email) if email.present? 16 end 17 18 19 # 暗号化 20 def encrypt(value) 21 22 @SECURE = 'HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE' 23 @CIPHER = 'aes-256-cbc' 24 25 crypt = ActiveSupport::MessageEncryptor.new(@SECURE, @CIPHER) 26 crypt.encrypt_and_sign(value) 27 28 end 29 30 # 復号 31 def decrypt(value) 32 33 @SECURE = 'HOGEHOGEHOGEHOGEHOGEHOGEHOGEHOGE' 34 @CIPHER = 'aes-256-cbc' 35 36 crypt = ActiveSupport::MessageEncryptor.new(@SECURE, @CIPHER) 37 crypt.decrypt_and_verify(value) 38 39 end 40 41end 42

補足情報(FW/ツールのバージョンなど)

ruby 2.6.2
rails 5.2.3

追記(メール認証でも動作を確認しました。)

メール認証を設定し、アカウントを登録したところ下記のエラーが表示されました。
調べると送信先のアドレスが間違っているとのことでした。

上記および今回のエラーを踏まえると、devise内での復号のタイミングが適切でないということだと思います。

が、これからどのよう進めればよいかがわからないので、思いついたことでも結構ですのでアドバイスいただけると幸いです。
どうぞよろしくおねがいします。

ruby

1#Net::SMTPSyntaxError in Devise::RegistrationsController#create 2 3504 5.5.2 <oZLsun1medgaMntc1nV/fVPWKMei4XGNtotPmg==--ned5OOktaS+Sx9Hq--zM5quxCGAs3AfH0AmOa10g 4==>: Recipient address rejected: need fully-qualified address

ruby

1 def check_response(res) 2 unless res.success? 3 raise res.exception_class, res.message #ここがハイライト 4 end 5 end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問