我想要使用设备登录时不需要电子邮件。我从config / initializers / devise.rb中删除了电子邮件:
config.authentication_keys = [ :login ]
并将其添加到我的用户模型中:
def email_required?
false
end
但是,当我尝试保存用户时,我收到此错误:
SQLite3::SQLException: users.email may not be NULL
我想改变迁移中的某些内容吗?
答案 0 :(得分:30)
有些参考文献表示您不应删除:validatable
,因为它会删除password validations。
就我而言,我从数据库中的用户中删除了列email
,并且设计开始崩溃。我补充说:
# app/models/user.rb
def email_required?
false
end
def email_changed?
false
end
它运作正常。
答案 1 :(得分:17)
看起来您将数据库中设置的电子邮件字段设置为“not NULL”或“Allow Null”为false。 并且您直接从数据库收到错误。 假设您的用户模型被称为用户,您需要添加以下的迁移来修复:
change_column :users, :email, :string, :null => true
文档: http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column
答案 2 :(得分:9)
除了从:email列中删除“required”之外,您还需要从用户模型中删除“:validatable”。
答案 3 :(得分:0)
如果问题是服务中的问题未向您提供电子邮件,则此解决方案较为干净:
https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview#user-didnt-allow-email-permissions