You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Phoenix的Plug中终止后续路由?

Phoenix Plug鉴权后终止请求的解决方案

在Phoenix的Plug里,光调用send_resp/3发送403响应还不够,默认情况下后续的Plug和路由逻辑还是会继续执行,这就是你遇到冲突报错的原因。要终止后续流程,必须调用halt/1函数标记连接已处理完成。

修改后的代码如下:

def validate(conn, _opts) do
  if !Map.has_key?(conn.cookies, "jwt") do
    conn
    |> send_resp(403, "Forbidden")
    |> halt() # 新增halt,阻止后续路由执行
  else
    conn # 验证通过时返回原连接,让流程继续
  end
end

关键说明

  • halt/1会把Conn结构体的:halted字段设为true,Phoenix的Plug pipeline检测到这个状态后,就会停止执行后续所有的Plug和路由处理逻辑。
  • 必须保证Plug函数始终返回一个Conn结构体:不管验证失败还是成功,都要返回处理后的conn,这样才能符合Plug的规范。

内容的提问来源于stack exchange,提问作者Basil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:50:36