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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:54:38