如何配置Guardian以排除/auth/*路由的身份验证要求
调整方案
你可以通过拆分路由管道的方式实现需求,具体修改如下:
1. 拆分路由管道定义
将原:api管道中的格式处理和鉴权逻辑拆分到两个独立管道,修改你的router.ex管道配置:
# 基础API管道,仅处理JSON格式 pipeline :api do plug :accepts, ["json"] end # 鉴权API管道,额外加载Guardian验证逻辑 pipeline :api_auth do plug MyApp.AuthAccessPipeline end
2. 拆分路由scope分组
将不需要鉴权的/auth/*路由和需要鉴权的业务路由拆分到不同的scope,分别绑定对应管道:
# 无需鉴权的公开接口,仅走基础API管道 scope "/api/v1", MyAppWeb do pipe_through :api post "/auth/sign_up", UserController, :sign_up post "/auth/sign_in", UserController, :sign_in post "/auth/forgot_password", UserController, :forgot_password end # 需要身份验证的业务接口,同时走基础API+鉴权管道 scope "/api/v1", MyAppWeb do pipe_through [:api, :api_auth] resources "/users", UserController, except: [:new, :edit] end
原理解释
原来的配置中所有/api/v1前缀的路由都统一走了包含鉴权逻辑的管道,因此所有请求都会强制校验身份。拆分后公开路由不会触发Guardian的验证逻辑,即可实现/auth/*路径免验证访问的需求。
内容的提问来源于stack exchange,提问作者hyde
相关产品推荐
相关产品推荐

