Laravel+JQuery登录接口出现401 Unauthorized错误排查求助
前端代码问题修复
- 修复CSRF令牌选择器语法错误
代码中$('input[name=\"_token\"').val();缺少闭合的],导致无法正确获取表单CSRF令牌,修改为:var token = $('input[name="_token"]').val(); - 移除多余转义符
Blade模板中的URL和DOM选择器里的转义符会导致解析异常,修正后:{{url(\"api/login\")}}→{{ url('api/login') }}$('meta[name=\"_token\"]')→$('meta[name="_token"]')
- 统一CSRF传递方式
Laravel支持通过X-XSRF-TOKEN请求头或表单_token字段传递令牌,二选一即可。建议保留ajaxSetup的请求头方式,移除表单数据中的_token字段避免重复:data: { 'email': email, 'password': password },
后端代码潜在问题修复
- 修正Validator类导入大小写
LoginRequest中导入的Validator类名大小写错误,会导致验证失败时无法触发正确处理逻辑,修改为:use Illuminate\Contracts\Validation\Validator; // 改为大写开头的Validator - 确认Auth Guard匹配
如果登录路由在routes/api.php(默认使用apiguard),需要在登录时指定对应guard:
同时检查if(!Auth::guard('api')->attempt($request->only('email','password'))) { Helpers::sendError('Email or password is wrong !!!'); }config/auth.php中apiguard的驱动配置是否符合你的认证方式:'guards' => [ 'api' => [ 'driver' => 'session', // 若用session认证,或根据需求改为token 'provider' => 'users', ], ], - 确保错误响应返回正确状态码
检查Helpers::sendError方法是否返回HTTP 401状态码,示例实现:public static function sendError($message, $errors = [], $code = 401) { return response()->json([ 'success' => false, 'message' => $message, 'errors' => $errors ], $code); }
额外排查点
- 路由位置验证:确认登录路由在
routes/web.php还是routes/api.php,若在api.php需确保未给登录接口添加auth:api中间件。 - 浏览器控制台检查:查看请求URL是否正确、
X-XSRF-TOKEN请求头是否存在、表单数据是否完整发送。 - 跨域/ Cookie配置:若为跨域请求,需给JQuery ajax添加
xhrFields: {withCredentials: true}以携带session cookie。
内容的提问来源于stack exchange,提问作者Burhan Ali
相关产品推荐
相关产品推荐

