Как спасти от OAuth :: Unauthorized исключение в приложении Ruby on Rails? - PullRequest
3 голосов
/ 10 февраля 2012

Как я могу спастись от OAuth :: Unauthorized исключение, которое возникло из OmniAuth в приложении Ruby on Rails?

Очевидно, это:

  rescue_from OAuth::Unauthorized, :with => :unauthorized

не будет работать, поскольку это только перехватывает исключение, генерируемое внутри Rails, и это исключение генерируется где-то еще в цепочке стойки.

В этом приложении администраторы (а не мы, разработчики) настраивают учетные данные для твиттера и фейсбука, поэтому неправильные учетные данные могут произойти и действительно происходят. Я хотел бы показать лучшее сообщение: «Что-то пошло не так», когда это произойдет.

Обновление : я также спросил в группе omniauth google , пока нет ответов, но если вы читаете этот вопрос, вы можете проверить его.

1 Ответ

2 голосов
/ 03 марта 2012

OmniAuth работает из Rack Middleware, поэтому rescue_from не повлияет на него, потому что это уровень абстракции выше OmniAuth через ActionController.

Эта ошибка обычно возникает из-за неправильной настройки параметров OAuth. В основном это говорит о том, что ваше приложение не авторизовано для аутентификации, а не что аутентификация пользователя не удалась.

Ошибка конфигурации - это то, что вы, как разработчик, хотели бы устранить, поэтому я не уверен, почему вы захотите спасти исключение, подобное этому.

Если вам абсолютно необходимо спасти это исключение, вы можете переопределить и использовать промежуточное программное обеспечение, которое наследуется от OmniAuth

module OmniAuth
  module Strategies
    class FacebookWithExceptionHandling < OmniAuth::Strategies::Facebook
      def call
        begin
          super
        raise OmniAuth::Unauthorized => e
          #handle appropriately in rack context here
        end
      end
    end
  end
end

Rails.application.config.middleware.use OmniAuth::Builder do
  provider OmniAuth::Strategies::FacebookWithExceptionHandling, 
    api_key, #your api key 
    secret_key, #your secret key
end
...