Laravel使用jwt-auth做JWT认证时注册后返回Unauthenticated错误
问题根因
你遇到的报错核心原因是AuthController的中间件排除规则存在语法错误,导致signup接口被登录认证中间件拦截,业务代码未执行。
具体错误点
- 构造函数中间件配置错误
你当前的构造函数代码为:
public function __construct() { $this->middleware('auth:api', ['except' => ['login,signup']]); }
except参数需要传入由独立方法名组成的数组,你将login和signup两个方法名写在同一个字符串中,框架无法识别signup为排除项,因此所有访问signup接口的请求都会被auth:api中间件校验登录状态,未携带有效token就会直接返回Unauthenticated错误,用户写入逻辑完全不会执行。
- 可选优化:登录方法明确指定guard
你当前登录使用的auth()->attempt()会调用Laravel默认的guard,建议明确指定api guard避免配置偏差带来的问题:
if (! $token = auth('api')->attempt($credentials)) { return response()->json(['error' => 'Unauthorized'], 401); }
修复方案
- 将构造函数的中间件配置修改为:
public function __construct() { $this->middleware('auth:api', ['except' => ['login', 'signup']]); }
- 执行以下命令清理缓存:
php artisan config:clear php artisan route:clear
- 重新测试signup接口即可正常写入用户数据,调用登录接口也会正常返回token。
内容的提问来源于stack exchange,提问作者enamul haque
相关产品推荐
相关产品推荐

