Devise: не требуется электронная почта
Я бы хотел, чтобы не требовалось электронное письмо для входа в систему с помощью devise. Я удалил адрес электронной почты из config/initializers/devise.rb:
config.authentication_keys = [ :login ]
и добавил это в мою модель пользователя:
def email_required?
false
end
Тем не менее, я получаю эту ошибку, когда пытаюсь сохранить пользователя:
SQLite3::SQLException: users.email may not be NULL
Можно ли что-то изменить в миграции?
Ответы
Ответ 1
Похоже, у вас есть поле электронной почты, установленное в базе данных, как "not NULL" или "Allow Null" в false.
И вы получаете ошибку непосредственно из базы данных.
Предполагая, что ваша пользовательская модель называется пользователем, вам нужно добавить следующую миграцию, чтобы исправить это:
change_column :users, :email, :string, :null => true
Документация:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column
Ответ 2
Некоторые ссылки говорят, что вы не должны удалять :validatable
, потому что это удалит проверки пароля.
В моем случае, я удалил столбец email
из моих пользователей в базе данных, и устройство начало сбой. Я добавил это:
# app/models/user.rb
def email_required?
false
end
def email_changed?
false
end
и это сработало правильно.
Ответ 3
Дополнительно для удаления столбца "required" from: email вам нужно удалить ": validatable" из пользовательской модели.
Ответ 4
Если проблема заключалась в том, что рассматриваемая служба не предоставляла вам электронное письмо, это немного более чистое решение:
https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview#user-didnt-allow-email-permissions