首页 > 解决方案 > 在 Elixir Phoenix 中指定需要经过身份验证的用户的资源路由

问题描述

phx_gen_auth在我的 Elixir Phoenix 应用程序中用于用户登录、注册和身份验证。它带有一个:require_authenticated_user插件来决定特定路由是否需要用户在访问之前进行身份验证。

如果我有一个帖子资源,router.ex可以为我提供所有标准操作:

resources "/posts", PostController

如何最好地组织某些路线以要求用户登录?例如,查看所有帖子或查看单个帖子不需要登录。但是创建、编辑、更新、删除帖子需要用户登录。

有没有办法管理哪些路由需要身份验证,而无需在两个scope具有单独 s 的单独块中分别指定我的所有路由pipe_through

标签: elixirphoenix-framework

解决方案


正如文档中所述Phoenix.Router.pipeline/2

每次pipe_through/1调用时,新管道都会附加到先前给出的管道上。

也就是说,这将起作用:

scope "/", MyWeb do
  pipe_through [:browser]
  get "/index", PostController

  pipe_through, :auth
  get "/show", PostController
  post "/create", PostController
  put "/update", PostController
end

另一种解决方案是直接在控制器中使用插件

defmodule MyWeb.PostController do
  plug :auth when action in ~w|show create update|a

  def show(conn, params) do
    # ...
  end
end

推荐阅读