Помощь Использование Devise со встроенной поддержкой Omniauth

Я попытался следовать https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview, но почему-то, когда я смотрю на сгенерированные маршруты, я вижу только путь обратного вызова, а не путь авторизации (и действительно я получаю ошибку в представлении со ссылкой user_omniauth_authorize_path).

Я предполагаю, что это может быть проблема версий OmniAuth и Devise (после 0.2.0. бета-версия Omniath позволяет настраивать параметры, а маршруты должны быть определены). Однако при попытке использовать более старую версию OmniAuth я получаю сообщение об ошибке «You are using an old OmniAuth version, please ensure 0.2.0.beta or later installed.».

Я пытался работать с мастером Devise, 1.2.rc и веткой omniauth, а также со всем геммом omniauth (после 0.2.0.beta) и с «oa-oauth», но безуспешно. Я также попытался определить маршрут:

match '/users/auth/:action/', :to => 'users/omniauth_callbacks#action', :as => 'user_omniauth_authorize'

Это помогло с маршрутом, но при нажатии на ссылку я получил ошибку, что устройство не может найти сопоставление. Достаточно забавно, изменение контроллера в devise_for на недопустимый (например, добавление '/' перед пользователями/omniauth_callbacks) привело к ошибке в первый раз ("Имя контроллера не должно начинаться с косой черты"), но на самом деле была отправлена ​​​​небольшая перезагрузка меня в фейсбук и обратно (но, естественно, маршрут обратного вызова не был определен).

Я новичок в Ruby и не совсем уверен, куда идти дальше. Любая помощь будет оценена.


person krakover    schedule 02.03.2011    source источник
comment
вы когда-нибудь разобрались с этой проблемой?   -  person McStretch    schedule 23.04.2011
comment
Неважно, простой перезапуск сервера исправил это для меня.   -  person McStretch    schedule 23.04.2011


Ответы (2)


Этот метод определен devise, а не через маршруты. Поэтому он не будет отображаться при запуске rake routes. Метод использует одного из провайдеров oauth, которые вы настроили в config/initializers/devies.rb. Например, если вы определите следующее в devise.rb:

config.omniauth :facebook, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET

Затем вы должны создать ссылку авторизации следующим образом:

<%= link_to "Facebook Sign in", user_omniauth_authorize_path(:facebook) %>
person Braden Becker    schedule 02.03.2011
comment
Как я уже упоминал, эта ссылка не работает (неопределенный метод), на мой взгляд. - person krakover; 03.03.2011
comment
Плохо, я не нажал на бета-версию 0.2. Какой провайдер вы используете, я только что обновился до oa-oauth 0.2.0.beta5 с devise 1.2rc, и facebook у меня отлично работает. - person Braden Becker; 04.03.2011
comment
Devise 1.4.5 и omniauth 0.3.0.rc3 работают нормально. Обязательно перезапустите сервер — он никогда не появится в рейк-роутах. - person Professor Todd; 19.09.2011

Моя проблема была связана с разными версиями omniauth и devise. Что, наконец, сработало, так это использование этой конфигурации в моем gemfile:

gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
gem 'omniauth', '>=0.2.0.beta'
gem 'oa-oauth', :require => 'omniauth/oauth'

вы можете увидеть более подробную информацию о моей реализации здесь.

person krakover    schedule 14.10.2011
comment
похоже на проблему в devise 1.4.8; У меня работали omniauth 0.3.0 и devise 1.4.7. - person David; 17.10.2011
comment
Поместите devise :omniauthable в пользовательскую модель. Это решит проблему. - person Thillai Narayanan; 13.04.2012
comment
@JudeArasu - он уже есть (посмотрите ссылку на реализацию) - все еще не работает. - person krakover; 06.11.2013