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

Laravel8 Passport API已认证时重复登录如何返回带token的自定义JSON

解决方案核心思路

你当前的重定向逻辑默认面向普通网页端请求,只需要在校验已登录的逻辑分支中,先区分请求类型,针对API类请求单独返回JSON响应即可,具体操作步骤如下:

  • 第一步:在身份认证中间件/authenticated方法的最前端,增加请求类型判断逻辑
    优先判断当前请求是否为API请求,常见的判断规则可二选一或者组合校验:
    • 检查请求头的Accept字段是否为application/json
    • 检查路由前缀是否匹配/api/*这类你预设的API路由规则
    • 部分框架自带快捷判断方法,比如Laravel可直接调用$request->wantsJson(),Django可判断request.content_type == 'application/json'
  • 第二步:改写已登录分支的返回逻辑
    如果判定为API请求且用户已登录,直接构造JSON响应返回,跳过重定向逻辑,响应体可包含你需要的当前用户token、用户信息等字段。

以下是Laravel框架的参考代码示例:

protected function authenticated(Request $request, $user)
{
    // 优先判断是否为API请求
    if ($request->wantsJson()) {
        return response()->json([
            'code' => 200,
            'message' => '已处于登录状态',
            'data' => [
                // 可根据业务需求选择返回现有有效token或生成新token
                'token' => $user->createToken('api-token')->plainTextToken,
                'user_info' => $user
            ]
        ]);
    }
    // 保留原有网页端重定向逻辑
    return redirect()->intended($this->redirectPath());
}
额外注意事项
  • 你可以根据业务需要选择是复用用户当前有效的未过期token,还是每次请求都重新生成新token返回
  • 如果你的API接口要求请求头必须携带Accept: application/json,要记得在Postman测试时主动加上这个请求头,否则框架可能会判定为普通网页请求,依旧触发重定向逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:05