Как разделить логи условного перенаправления c для нескольких маршрутов в Rails? - PullRequest
0 голосов
/ 28 марта 2020

Я использую Devise для аутентификации в приложении Rails 6. Как только пользователь войдет в систему, я хотел бы условно проверить, что они завершили вход в систему, прежде чем разрешить ему посещать любые и все аутентифицированные маршруты. Если нет, их следует перенаправить обратно через входящий поток. Примерно так:

unless current_user.has_completed_onboarding
  redirect_to '/onboarding'
end

У меня есть около десятка маршрутов, где я хочу реализовать эту логику c. Какой лучший способ добавить эту проверку перед каждым запросом к аутентифицированному маршруту, не дублируя его в каждом контроллере? Спасибо!

1 Ответ

1 голос
/ 28 марта 2020

в этом случае вы можете написать метод в ApplicationController. Предположим, что check_user_onboarding

def check_user_onboarding
  return redirect_to '/onboarding' unless current_user.has_completed_onboarding
end

Затем в контроллерах вы можете проверить, добавив обратный вызов before_action. Нижеприведенный проверит все методы этого контроллера.

before_action :check_user_onboarding

Вы также можете указать методы, которые необходимо проверить, например -

before_action :check_user_onboarding, only: [:method1, :method2]

или есть except

before_action :check_user_onboarding, except: [:method1, :method2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...