Разработать: как вернуть 401 Несанкционированный без перенаправления, если пользователь не вошел в систему - PullRequest
0 голосов
/ 07 марта 2019

Rails версия: 4.0.13

Разработать версию: 3.2.0

Когда пользователь пытается просмотреть страницу, которую он не имеет права просматривать, мое приложение перенаправляет его на страницу входа.

Если пользователь не вошел в систему, я хочу:

  1. Не перенаправить пользователя на новый URL и
  2. Вернуть ответ «401 Несанкционированный» с пустым телом.

Пока я пытался переопределить authenticate_user! примерно так:

class BaseApiController < ActionController::Base
  before_filter :authenticate_user!

  def authenticate_user!
    head :unauthorized
  end
end

Однако, хотя это и возвращает «401 Unauthorized», оно также перенаправляет в первую очередь на URL для входа.

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Это то, что вы ищете?

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-when-the-user-can-not-be-authenticated

Это все еще перенаправляет пользователя, хотя вы можете контролировать, куда идет это перенаправление.

0 голосов
/ 07 марта 2019

Построение ответа @ винила, следующее вернет 401 без перенаправления, если пользователь не вошел в систему:

# lib/custom_failure.rb
class CustomFailure < Devise::FailureApp
  def respond
    http_auth
  end
end

# config/initializers/devise.rb
config.warden do |manager|
  manager.failure_app = CustomFailure
end

Вы можете настроить respond для перенаправления в некоторых случаях и выбросить 401 дела вдругие.Для моего случая использования было достаточно:

class CustomFailure < Devise::FailureApp
  def respond
    if request.env['REQUEST_PATH'].start_with?('/api')
      http_auth
    else
      redirect
    end
  end
end

Я не понимаю, почему переопределение authenticate_user! здесь не сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...