Я использую omniauth
для реализации аутентификации Twitter в своем приложении. У меня работает аутентификация в Facebook, и я знаю, где код для аутентификации в Twitter дает сбой, но я не могу понять, почему!
Твиттер не предоставляет адрес электронной почты, и мой сайт аутентифицируется на основе электронной почты/пароля, поэтому я разрешаю пользователям добавлять учетную запись Твиттера только к уже существующей учетной записи, созданной путем регистрации на сайте или через Facebook.
Это соответствующий код, часть моего services_controller.rb
:
logger.info("USER SIGNED IN")
auth = Service.find_by_provider_and_uid(provider, uid)
logger.info("AUTH: #{auth}")
#If user is signed in but does not have this service linked to his account
if !auth
logger.info("AUTH IS NULL, SERVICE NOT LINKED TO ACCOUNT")
logger.info("PROVIDER: #{provider}, UID: #{uid}, EMAIL: #{email}")
user.services.create!(:provider => provider, :uid => uid, :uemail => email)
logger.info("SERVICE CREATED")
flash[:notice] = 'Sign in via ' + provider.capitalize + ' has been added to your account.'
redirect_to services_path
Последнее, что я вижу в своем журнале, это:
AUTH IS NULL, SERVICE NOT LINKED TO ACCOUNT
PROVIDER: twitter, UID: 3195xxxxx, EMAIL:
Completed in 231ms
Started GET "/auth/failure?message=invalid_response" for 127.0.0.1 at 2011-08-05 20:52:30 +0530
ActionController::RoutingError (No route matches "/auth/failure"):
Как видно из приведенного выше кода, это означает, что строка user.services.create!(...)
не работает, поэтому я никогда не вижу SERVICE CREATED
в своем журнале. Я не знаю, почему это не удается, хотя. Я знаю, что переменная email
пуста, но это ожидаемо, поскольку Twitter не предоставляет электронные письма. Я даже пытался заменить :uemail => email
на :uemail => "[email protected]"
, но все равно получаю тот же результат.