前提・実現したいこと
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
あなたの回答
tips
プレビュー