elixir - 在 Elixir Phoenix 中指定需要经过身份验证的用户的资源路由
问题描述
我phx_gen_auth
在我的 Elixir Phoenix 应用程序中用于用户登录、注册和身份验证。它带有一个:require_authenticated_user
插件来决定特定路由是否需要用户在访问之前进行身份验证。
如果我有一个帖子资源,router.ex
可以为我提供所有标准操作:
resources "/posts", PostController
如何最好地组织某些路线以要求用户登录?例如,查看所有帖子或查看单个帖子不需要登录。但是创建、编辑、更新、删除帖子需要用户登录。
有没有办法管理哪些路由需要身份验证,而无需在两个scope
具有单独 s 的单独块中分别指定我的所有路由pipe_through
?
解决方案
正如文档中所述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
推荐阅读
- postgresql - 如何在 Doobie (Postgres) 中读取/写入时间戳
- javascript - 使用 ES6 优化 javascript 中的递归类别和子类别函数
- c++ - 在双数组的 calloc 上写入大小为 8 的无效
- vb.net - 来自文本文件的数据库路径
- neo4j - 在 Neo4j 中为关系设置属性
- react-native - React Native 文本和图像并排对齐问题
- netlogo - 如何在 NetLogo 中改变随机海龟的颜色
- java - SpEL Spring中的三元运算符
- c# - Windows 身份验证:用户 'DOMAIN\MACHINE$' 登录失败
- android - Android 推送通知与 Firebase 推送通知