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
相关产品推荐
相关产品推荐

