Laravel基础学习:Post方法跳转页面提示过期问题求助
解决Laravel表单提交「页面过期」(419错误)的问题
嘿,你遇到的这个问题我之前也碰过好几次,其实就是Laravel的CSRF保护机制在生效啦!
问题根源
Laravel默认会对所有POST/PUT/DELETE类型的请求做CSRF验证,用来防止跨站请求伪造攻击。你的登录表单里没有携带CSRF令牌,所以框架直接拒绝了请求,返回了「页面过期」的提示。
快速解决方法
只需要在你的表单里添加Laravel提供的@csrf Blade指令就行,把它放在<form>标签内部的最上方:
<form method="post" action="./home" class="login-form"> @csrf <!-- 就是这行! --> <input type="text" placeholder="username" name="login-username"> <br> <input type="password" placeholder="pass" name="login-password"> <br> <button type="submit" class="btn-login">Log In</button> </form>
这个指令会自动生成一个隐藏的<input>字段,里面包含了正确的CSRF令牌值,Laravel就能正常验证你的请求了。
额外优化建议(可选)
为了让路由更健壮,推荐你给路由命名,然后用route()辅助函数生成表单的action路径,避免相对路径可能出现的问题:
- 修改
web.php里的路由,加上名称:
Route::post('/home', 'loginController@index')->name('login.submit');
- 然后把表单的action改成:
<form method="post" action="{{ route('login.submit') }}" class="login-form">
这样不管你的项目部署在什么域名下,表单都会提交到正确的路由地址。
补充说明
CSRF保护是Laravel的核心安全机制之一,除非是API接口(可以用令牌验证),否则所有表单提交的非GET请求都必须携带CSRF令牌,千万别随便关闭这个保护哦!
内容的提问来源于stack exchange,提问作者W Al123
相关产品推荐
相关产品推荐

