Rails 7 加密电子邮件 + Devise(错误)

问题描述 投票:0回答:2

我正在使用 Rails 7 + Devise gem。我正在尝试加密电子邮件字段(由设计生成)。我成功完成了 Rails db:encryption:init 并设置了我的凭据。

用户型号:

class User < ApplicationRecord
  
  encrypts :email, deterministic: true, downcase: true
  validates :email, presence: true
  
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable, :confirmable

end

当我尝试访问登录和注册路径时,出现以下错误:

ActiveRecord::Encryption::Errors::Decryption in Devise::Sessions#new

ActiveRecord::Encryption::Errors::Decryption in Devise::Registrations#new

两者都指向视图中的这条线:

<%= f.input :email,

即使当我尝试通过 Rails 控制台创建新用户时,我得到:

unexpected token at '' (JSON::ParserError) 
ActiveRecord::Encryption::Errors::Encoding (ActiveRecord::Encryption::Errors::Encoding)
ActiveRecord::Encryption::Errors::Decryption (ActiveRecord::Encryption::Errors::Decryption)

我该如何解决这个问题?新的 Rails 7 ActiveRecord 加密是否可用于 Devise?

非常感谢。

ruby-on-rails ruby devise
2个回答
3
投票

看起来这应该有助于解决您的错误https://github.com/heartcombo/devise/issues/5436#issuecomment-1014152052

有2种方式,您可以设置:

config.active_record.encryption.support_unencrypted_data = true

或更改电子邮件字段的迁移:

null: false, default: ""

0
投票

您需要从用户中删除

default: ""

class RemoveDefaultEmailFromUsers < ActiveRecord::Migration[7.0]
  def up
    change_column_default(:users, :email, nil)
  end

  def down
    change_column_default(:users, :email, '')
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.