Laravel注册接口状态码异常及如何仅返回204无响应体的问题求助
Laravel注册接口状态码异常及如何仅返回204无响应体的问题求助
我现在遇到一个Laravel注册相关的奇怪问题,想请大家帮忙排查一下:
当注册请求返回200状态码且redirected: true时,数据库的users表里完全没有新增用户记录;但如果返回204状态码且redirected: false,用户就能成功注册并写入数据库。
另外我在Postman里测试还发现一个规律:如果先执行登出操作,再去发起注册请求,返回的就是204状态码,这时候注册流程是完全正常的。
截图说明:截图展示了注册请求的响应信息,能看到不同情况下的状态码(200或204)以及redirected的布尔值状态。
前端Register.jsx代码
async function handleRegister(e) { e.preventDefault(); await fetch('http://localhost:8000/sanctum/csrf-cookie', { method: "GET", credentials: "include" }); // Extract CSRF token const csrfToken = decodeURIComponent( document.cookie.split('; ').find(row => row.startsWith('XSRF-TOKEN='))?.split('XSRF-TOKEN=')[1] || '' ); console.log(csrfToken); const res = await fetch('http://localhost:8000/register', { method: "POST", headers: { "X-XSRF-TOKEN": csrfToken }, credentials: "include", body: JSON.stringify(formData), }); if (!res.ok) { console.error("Registration failed:", res); if (res.errors) { setErrors(res.errors); console.error("Errors:", res.errors); } } else { navigate("/login"); console.log(res); } }
后端RegisteredUserController.php代码
namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Auth\Events\Registered; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules; class RegisteredUserController extends Controller { /** * Handle an incoming registration request. * * @throws \Illuminate\Validation\ValidationException */ public function store(Request $request): Response { $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], 'password' => ['required', 'confirmed', Rules\Password::defaults()], ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->string('password')), ]); event(new Registered($user)); Auth::login($user); return response()->noContent(); } }
路由auth.php代码
Route::post('/register', [RegisteredUserController::class, 'store']) ->middleware('guest') ->name('register');
我现在特别困惑:明明控制器里明确返回的是response()->noContent()(对应204状态码),为什么有时候会返回200且重定向呢?而且只有登出后注册才正常,这会不会和Sanctum的会话状态、认证中间件有关?麻烦各位帮忙分析一下可能的原因,谢谢大家!
备注:内容来源于stack exchange,提问作者Angelica
相关产品推荐
相关产品推荐

