Я использую omniauth
для реализации аутентификации Twitter в моем приложении. У меня работает аутентификация на фейсбуке, и я знаю, где код для аутентификации на твиттере не работает, но я не могу понять, почему!
Twitter не предоставляет адрес электронной почты, и мой сайт аутентифицируется на основе электронной почты / pw, поэтому я разрешаю пользователям только добавлять учетную запись 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 => "validemail@gmail.com"
, но все равно получаю тот же вывод.