Elixir / Phoenix Framework аутентификация / авторизация

Я делаю проект для фреймворка elixir / phoenix. Возник вопрос по авторизации. Например, у меня есть маршрут:

get "/dashboard", DashboardController, :index

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


person Денис Корх    schedule 24.10.2019    source источник
comment
Какую библиотеку аутентификации вы используете? По сути, вам нужно добавить соответствующий плагин в свой конвейер.   -  person Aleksei Matiushkin    schedule 24.10.2019
comment
@AlekseiMatiushkin, я бы хотел иметь какой-то предварительный обработчик маршрута, который бы просто проверял значение в сеансе и либо позволял пользователю идти по маршруту, либо нет   -  person Денис Корх    schedule 24.10.2019
comment
Вы в основном просите рекомендации, что здесь, на S O, считается не по теме. Возможно, вы могли бы провести небольшое исследование самостоятельно, а затем сузить свой вопрос.   -  person Onorio Catenacci    schedule 25.10.2019


Ответы (1)


Я использую pow для аутентификации. У меня следующий конвейер:

 pipeline :protected do
    plug Pow.Plug.RequireAuthenticated,
      error_handler: Pow.Phoenix.PlugErrorHandler
  end

Затем мне просто нужно пропустить мой прицел через правую трубу:

 scope "/dashboard", MyAppWeb do
    pipe_through [:browser, :protected]
    get "/", PageController, :dashboard
  end

Все пути, требующие аутентификации, будут идти туда. Если вы хотите, чтобы это было для какой-то другой библиотеки / реализации, подход должен быть аналогичным. Вы можете увидеть пример аутентификации с использованием Guardian в здесь, где область действия используется таким же образом.

person cdvv7788    schedule 24.10.2019