интеграция привратника с приложением Rails 4

Следуя инструкциям (как я думал) в файле readme github привратника, я добрался до файла before_action.

class ReadingsController < ApplicationController
  before_action :doorkeeper_authorize! # Require access token for all actions
...
end

RubyMine жалуется, что :doorkeeper_authorize! не определен в области видимости. Если я запущу его в любом случае, я получаю:

Processing by ReadingsController#index as HTML
Filter chain halted as :doorkeeper_authorize! rendered or redirected
Completed 401 Unauthorized in 48ms (ActiveRecord: 0.0ms)

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

Ну, это сбой, или это на самом деле говорит мне, что я не авторизован? И если это так, зачем мне подключать перенаправление, чтобы позволить кому-то действительно аутентифицироваться?


person bmargulies    schedule 19.09.2015    source источник
comment
Привратник предоставляет другим веб-сайтам способ аутентификации с использованием существующей учетной записи в приложении на базе Привратника. Привратник сам по себе не обеспечивает аутентификацию. Возможно, я неправильно понял вопрос, пожалуйста, уточните, если это так. Мне непонятно, как вы пытаетесь проверить желаемое поведение.   -  person D-side    schedule 19.09.2015
comment
Ага, понятно. ПРОВАЙДЕР oauth2. Я ищу потребителя oauth2. Упс.   -  person bmargulies    schedule 19.09.2015
comment
Да, это правильно! Недавно у меня было собеседование, на котором меня попросили внедрить сквозной провайдер OAuth2 и тестовый клиент для него. Вы можете посмотреть.   -  person D-side    schedule 19.09.2015


Ответы (1)


Следуя рабочему примеру, я создал в то время как до ваш код дает сбой в совершенно неожиданном месте: в инициализаторе Doorkeeper в блоке вроде этого:

resource_owner_authenticator do
  current_user || begin
    session[:guest_return_url] = request.fullpath
    redirect_to(user_omniauth_authorize_path(:facebook))
  end
end

Я не знаю, что у вас в этом блоке, но в целом он должен возвращать объект, который следует рассматривать как владелец ресурса. Привратник потерпел неудачу, потому что этот блок не смог этого сделать. Чтобы реализовать этот блок в моем примере, я использую помощник Devise current_user и запасной вариант redirect_to для случаев, когда пользователь не аутентифицирован (в конце концов, это выполняется в before_action).

Так что для того, чтобы привратник «впустил вас», вам нужно сказать ему, «как распознать хозяина». Это аутентификация, которую привратник не обрабатывает.

person D-side    schedule 19.09.2015