我正在使用 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?
非常感谢。
看起来这应该有助于解决您的错误https://github.com/heartcombo/devise/issues/5436#issuecomment-1014152052
有2种方式,您可以设置:
config.active_record.encryption.support_unencrypted_data = true
或更改电子邮件字段的迁移:
null: false, default: ""
您需要从用户中删除
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