2

Я разрешаю проверку подлинности Facebook на моем сайте Rails и использую Omniauth для этого. Недавно я получил следующее сообщение об ошибке в производстве:Как исправить ошибку электронной почты, когда пользователь регистрируется в Facebook (через Omniauth)

ActiveRecord :: RecordInvalid: Не удалось выполнить проверку электронной почты не может быть пустым, Email недействителен

Обычно Facebook подключений работает отлично, так что бы вызвать эта конкретная ошибка? Ниже приведен мой код для создания пользователя с Omniauth.

def self.create_from_omniauth(auth) 
    where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user| 
     user.provider = auth.provider 
     user.uid = auth.uid 
     user.name = auth.info.name 
     user.email = auth[:info][:email] 
     user.password = SecureRandom.urlsafe_base64(n=10) 
     user.save! 
    end 
end 
+0

и вы подтвердили, что auth [: info] [: email] существует и действителен? или это должно быть 'auth.info.email'? – Doon

+0

@ Вон, я думаю, его эквивалент. Регистрация Facebook обычно работает нормально. –

ответ

5

На самом деле, было много разговоров об этом issue in the omniauth-facebook repo.

Я думаю, что пользователь TeamRainless is the one who got closest to the answer:

Некоторые пользователи поставили номер телефона, который использует facebook, как это основной метод аутентификации вместо адреса электронной почты. Я считаю, что номер телефона затем зашифрован, и это станет тем, что обычно будет адресом электронной почты.

Единственное решение этой проблемы - перенаправить пользователя в форму, в которой процесс регистрации будет завершен. Посмотрите, как это сделать Railscasts OmniAuth Part 2 episode.