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

Laravel11+Inertia+Vue3登录错误不显示,请求返回302重定向

Laravel 11 + Inertia + Vue3 登录无效凭据无错误提示异常

使用Laravel 11搭配Inertia和VueJS 3开发项目,已安装Breeze并完成认证功能测试,原本运行正常,但测试无效凭据的错误提示时出现异常:提交登录表单后,接口先返回302状态码,随后自动跳转回登录页并返回200状态码,页面无任何错误信息展示。

前端Vue代码

<Form
    as="form"
    v-slot="$form"
    :initial-values="form"
    :resolver="resolver"
    @submit="onSubmit"
    class="flex flex-col gap-4 text-gray-900"
>
    <InputText id="email" name="email" v-model="form.email" type="email" autocomplete="username" class="w-full" />
    <Message v-if="$form.email?.invalid" severity="error" size="small">{{ $form.email.error.message }}</Message>
    <Message v-if="form.errors.email" severity="error" class="text-center mt-2">{{ form.errors.email }}</Message>
    <Message v-if="page.props.errors.email" severity="error" size="small">{{ page.props.errors.email }}</Message>
    <!-- ...其他字段... -->
    <Button type="submit" label="Entrar" class="w-full mt-2" />
</Form>

<script setup>
import { useForm, usePage } from '@inertiajs/vue3'
const page = usePage()
const form = useForm({ email: '', password: '', remember: false })
const resolver = ({ values }) => {
    const errors = {}
    if (!values.email) errors.email = [{ message: 'O e-mail é obrigatório.' }]
    else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(values.email)) errors.email = [{ message: 'O e-mail informado é inválido.' }]
    if (!values.password) errors.password = [{ message: 'A senha é obrigatória.' }]
    return { errors }
}
function onSubmit(e) {
    if (!e.valid || !e.states) return
    form.email = e.states.email.value
    form.password = e.states.password.value
    form.post(route('login'), { onFinish: () => form.reset('password') })
}
</script>

后端Laravel代码

LoginRequest 的 store 方法

public function store(LoginRequest $request)
{
    
    $request->authenticate();

    $request->session()->regenerate();
    return redirect()->intended(RouteServiceProvider::HOME);
}

LoginRequest 的 authenticate 方法

public function authenticate(): void
{
    if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
        throw ValidationException::withMessages([
            'email' => __('auth.failed'),
        ]);
    }
}

Kernel.php 配置

protected $middleware = [
  // \App\Http\Middleware\TrustHosts::class,
  \App\Http\Middleware\TrustProxies::class,
  \Illuminate\Http\Middleware\HandleCors::class,
  \App\Http\Middleware\PreventRequestDuringMaintenance::class,
  \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
  \App\Http\Middleware\TrimStrings::class,
  \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
]; 
/**
 * The application's route middleware groups.
 *
 * @var array<string, array<int, class-string|string>>
 */
protected $middlewareGroups = [
  'web' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \App\Http\Middleware\HandleInertiaRequests::class,
    \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
],

返回结果截图

返回结果截图


内容的提问来源于stack exchange,提问作者Arthur Silva Pereira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:44:51