Laravel开发中登录表单无法提交POST请求问题求助
Laravel登录表单无法提交POST请求排查结果
经核对代码,你提供的路由配置、控制器逻辑本身没有配置错误,问题全部出在前端表单部分,共有3处直接导致请求无法正常提交/处理的错误,1处可选优化项:
- 提交按钮类型配置错误:登录按钮当前设置为
type="button",该类型按钮默认不会触发表单提交行为,需修改为type="submit"。 - 缺失CSRF校验令牌:Laravel 所有Web路由下的POST请求默认强制校验CSRF令牌,当前表单未添加Blade提供的
@csrf指令,请求会被419状态码直接拦截,无法进入控制器逻辑。 - 输入框未配置name属性:邮箱、密码两个核心输入框仅设置了id属性,未配置name属性,后端无法从请求体中读取到提交的账号、密码参数,即使请求成功发送也会直接触发校验失败。
- 可选优化:当前邮箱字段的错误提示绑定的是
username字段,请根据你LoginRequest中定义的认证字段名(email或username),同步调整input的name属性值、$errors判断的字段名,保证三者一致,否则校验失败时错误提示无法正常展示。
修正后的表单代码
<form role="form" method="post" action="{{ route('login.perform') }}"> @csrf <div class="form-group"> <label class="form-control-label">Email address</label> @if ($errors->has('email')) <span class="text-danger text-left">{{ $errors->first('email') }}</span> @endif <div class="input-group input-group-merge"> <div class="input-group-prepend"> <span class="input-group-text"><i class="fas fa-user"></i></span> </div> <input type="email" name="email" class="form-control" id="input-email" placeholder="name@example.com"> </div> </div> <div class="form-group mb-4"> <div class="d-flex align-items-center justify-content-between"> <div> <label class="form-control-label">Password</label> @if ($errors->has('password')) <span class="text-danger text-left">{{ $errors->first('password') }}</span> @endif </div> <div class="mb-2"> <a href="#!" class="small text-muted text-underline--dashed border-primary">Lost password?</a> </div> </div> <div class="input-group input-group-merge"> <div class="input-group-prepend"> <span class="input-group-text"><i class="fas fa-key"></i></span> </div> <input type="password" name="password" class="form-control" id="input-password" placeholder="Password"> <div class="input-group-append"> <span class="input-group-text"> <a href="#" data-toggle="password-text" data-target="#input-password"> <i class="fas fa-eye"></i> </a> </span> </div> </div> </div> <div class="mt-4"> <button type="submit" class="btn btn-sm btn-primary btn-icon rounded-pill"> <span class="btn-inner--text">Sign in</span> <span class="btn-inner--icon"><i class="fas fa-long-arrow-alt-right"></i></span> </button> </div> </form>
注:如果你自定义的登录逻辑使用username而非email作为登录账号字段,将上述代码中email相关的name属性、错误判断字段名替换为username即可。
内容的提问来源于stack exchange,提问作者Michael T
相关产品推荐
相关产品推荐

