обратный вызов omniauth-facebook+devise не выполняется

Я внедрил devise и omniauth-facebook, следуя приведенным ниже инструкциям:

https://github.com/plataformatec/devise/wiki/OmniAuth:-Обзор

Проблема

Моя функция обратного вызова «facebook» вызывается.

Если я раскомментирую функцию «facebook», возникает ошибка. Маршрутизация вроде работает нормально

Однако код внутри функции, похоже, не выполняется.

Следующий код не вызывает никаких ошибок.

Я искал эту проблему в течение нескольких дней. Пожалуйста помоги...

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController


  def facebook
    raise params.inspect
  end

  def failure
    redirect_to root_path
  end

end

Журнал

Finished "/cable/" [WebSocket] for ::1 at 2016-09-10 22:32:32 +0900
MessagesChannel stopped streaming from messages
Started GET "/cable" for ::1 at 2016-09-10 22:32:32 +0900
Started GET "/cable/" [WebSocket] for ::1 at 2016-09-10 22:32:32 +0900
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
MessagesChannel is transmitting the subscription confirmation
MessagesChannel is streaming from messages
Started GET "/users/auth/facebook" for ::1 at 2016-09-10 22:32:34 +0900
I, [2016-09-10T22:32:34.770050 #84008]  INFO -- omniauth: (facebook) Request phase initiated.
Started GET "/users/auth/facebook" for ::1 at 2016-09-10 22:32:34 +0900
I, [2016-09-10T22:32:34.994734 #84008]  INFO -- omniauth: (facebook) Request phase initiated.
Finished "/cable/" [WebSocket] for ::1 at 2016-09-10 22:32:35 +0900
MessagesChannel stopped streaming from messages
Started GET "/users/auth/facebook/callback?code=AQBICSjBfjCN7rGbCZLSkdg25FqTZGsnDrJi1UhBj0RwSQBjuZ5bTxEA025jApkwWiianigtILjRV5Uv067Yg73MGzi7sB5BT9yU0kjm7wzYzkBhWMmT0Aecw4ajACkSbBNfVUIii0cokommOAbSJgbzmfKRgbMGmdgYZsF6rBDuPyAGHnFgAa6bSl3jUmzW25SCTY9CDARiGlr880B-gwMs3gX0_KbtXnygAkBhNHoBSFFOIIY7w4QIMQHzZe1aLz6VWz_LxnuN88Ao8_lWOLPCfxsOWUJkdjYbLCowXmu1bpOu1zUuXSf6Dw9qBnWm73XvMyMD3iSasRRqlFW1uVde&state=2362c719c103b6b19f053ccc31b0b90ab34d137a71c2cb8d" for ::1 at 2016-09-10 22:32:40 +0900
I, [2016-09-10T22:32:40.549353 #84008]  INFO -- omniauth: (facebook) Callback phase initiated.
Processing by Users::OmniauthCallbacksController#facebook as HTML
  Parameters: {"code"=>"AQBICSjBfjCN7rGbCZLSkdg25FqTZGsnDrJi1UhBj0RwSQBjuZ5bTxEA025jApkwWiianigtILjRV5Uv067Yg73MGzi7sB5BT9yU0kjm7wzYzkBhWMmT0Aecw4ajACkSbBNfVUIii0cokommOAbSJgbzmfKRgbMGmdgYZsF6rBDuPyAGHnFgAa6bSl3jUmzW25SCTY9CDARiGlr880B-gwMs3gX0_KbtXnygAkBhNHoBSFFOIIY7w4QIMQHzZe1aLz6VWz_LxnuN88Ao8_lWOLPCfxsOWUJkdjYbLCowXmu1bpOu1zUuXSf6Dw9qBnWm73XvMyMD3iSasRRqlFW1uVde", "state"=>"2362c719c103b6b19f053ccc31b0b90ab34d137a71c2cb8d"}
Redirected to http://localhost:3000/
Filter chain halted as :authenticate_user! rendered or redirected
Completed 302 Found in 1ms (ActiveRecord: 0.0ms)

Версии

devise 4.2.0
omniauth 1.3.1
omniauth-oauth2 1.4.0
omniauth-facebook 4.0.0
rails 5.0.0.1

person Oscar    schedule 10.09.2016    source источник


Ответы (2)


Я использовал обратные вызовы немного по-другому: вы должны объявить обратные вызовы в файле omniauth.rb:

Rails.application.config.middleware.use OmniAuth::Builder do
    provider :facebook, "app_id", "password",
        scope: 'public_profile', info_fields: 'id,name,link', display: 'popup', callback_path: '/stores/facebook_callback'

end

и, конечно же, добавьте действие «facebook_callback» в контроллер (в моем случае это было хранилище), а также добавьте его в файл маршрутов.

person Guy Dubrovski    schedule 10.09.2016

Возможно, какой-то другой механизм аутентификации мешает потоку omniauth и препятствует выполнению обратного вызова.

Вы можете проверить свой ApplicationController на наличие операторов before_action, которые могут вызвать проблему, и добавить их как skip_before_action в OmniauthCallbacksController.

Например. если у вас есть:

class ApplicationController < ActionController::Base
  before_action :authenticate_user
  ...

Затем добавьте:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  skip_before_action :authenticate_user
  ...

Это исправило это для меня, когда у меня была точно такая же проблема.

person jox    schedule 06.03.2020