Devise, OmniAuth & Facebook: "Не найдено. Аутентификация passthru".
Попытка следовать вместе с https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview, и я в тупике.
У меня есть config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET']
в моих config/initializers/devise.rb, devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
в моих маршрутах .rb и определен контроллер OmniAuthCallbacks.
Когда я навещаю user_omniauth_authorize_path(:facebook)
, я получаю:
Not found. Authentication passthru.
Я не уверен, что делать дальше. Я не использую маршрутизацию, поэтому я не считаю, что мне нужно определить метод passthru, но это просто дает мне 404.
Ответы
Ответ 1
Также убедитесь, что вы добавили маршрут в OmniauthCallbacksController:
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
и что вы добавили обновление в объявление разработки в своей модели пользователя:
devise :omniauthable, :omniauth_providers => [:facebook]
Ответ 2
Итак, я наткнулся на это после открытия старого проекта, и, увидев, что мой авторизационный url выглядит как "user/auth/facebook.facebook", я запускал маршруты рейка и решил его, изменив
<%= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %>
к
<%= link_to "Sign in with Facebook", user_facebook_omniauth_authorize_path %>
По-видимому, помощники для маршрутов omniauth изменились с момента возврата команды rake routes
:
user_facebook_omniauth_authorize GET|POST /users/auth/facebook(.:format) omniauth_callbacks#passthru
а не так, как это было несколько месяцев назад, когда я начал проект.
user_omniauth_authorize GET|POST /users/auth/facebook(:provider) omniauth_callbacks#passthru
Надеюсь, что этот пост помогает кому-то.
Ответ 3
У меня была такая же ошибка.
Для меня работала перезагрузка сервера rails, чтобы отразить изменения (config.omniauth :facebook, ENV['FB_APP_ID'], ENV['FB_APP_SECRET']
), которые я сделал для config/initializers/devise.rb.
Ответ 4
Я должен был перечислить это раньше, но в итоге я сделал подход "отступить и повторить попытку"; Я удалил все, что у меня было связано с OmniAuth, и начал работу над инструкциями. Хотелось бы, чтобы я знал, что конкретно, я ошибался, но, к сожалению, он "просто работал", как только я повторил.
tl; dr Следуйте шагам в https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview дословно и он должен работать
Ответ 5
Для тех, кто хочет знать, как это исправить, просто объявите метод passthru
или сделайте то, что я сделал, который использует action_missing
(не method_missing
, он устарел в Rails 4!), чтобы поймать все пользователи /auth/: провайдер ссылается на то, что omniauth использует один метод.
Например,
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def action_missing(provider)
# Set up authentication/authorizations here, and distribute tasks
# that are provider specific to other methods, leaving only tasks
# that work across all providers in this method.
end
Я надеюсь, что это поможет кому-то еще, кто застрял здесь, я это сделал.
Ответ 6
Сегодня я провел весь день, пытаясь отследить проблему, и, наконец, нашел ее, возвращаясь в историю git, так как раньше она работала.
Оказалось, что фильтр маршрутизации для переключения локалей каким-то образом был корнем зла. Я просто отключил метод filter :locale
на моих маршрутах и запрос авторизации перешел в facebook. Кровавый ад, я так рад, что, наконец, узнал об этом:)
Ответ 7
Попробуйте установить omniauth_path_prefix в файле инициализатора инициализации (config/initializers/devise.rb).
Для класса пользователя:
config.omniauth_path_prefix = "/users/auth"
Для другого класса (например, если вы используете учетную запись не для пользователя):
config.omniauth_path_prefix = "/accounts/auth"
То же самое с переведенными маршрутами (мой случай). Я перевел "пользователей" на "blabla". Чтобы он работал, мне пришлось установить префикс для "/blabla/auth". (Работает только для одного языка!)