“页面因不活动而过期” - Laravel 5.5

2022-08-30 07:14:40

我的注册页面正在正确显示表单,表单中存在CsrfToken()。{{ csrf_field() }}

表单

<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
        {{ csrf_field() }}
        ....
</form>

我正在为用户使用内置身份验证。除了路由和重定向之外,没有更改任何内容。

当我提交表单时(也在重新加载后),它给出页面由于不活动而已过期。请刷新并重试。错误。

我的是,我错过了一件非常小的事情。但不确定它是什么。有什么帮助吗?

更新

发现问题。会话驱动程序已设置为阵列。将其更改为文件,错误现在消失了。但是如果我使用数组,会有什么问题呢?


答案 1

如果您直接从搜索中获得此答案,请确保您已将csrf令牌添加到您的表单中,例如OP。{{ csrf_field() }}


如果已将会话驱动程序设置为文件:

可能与storage_path不可写有关。这是它存储有关令牌的会话数据的地方,如果您使用的是基于文件的会话。可以验证is_writable(config('session.files'))


对于 OP,会话驱动程序设置为阵列。数组仅用于测试。由于数据未持久化,因此它将无法在下一个请求上比较令牌。

阵列驱动程序在测试期间使用,并防止会话中存储的数据被持久化。

https://laravel.com/docs/5.5/session#configuration


检查配置/会话.php

最后,我刚刚遇到的一个问题,我们有一个项目,它在config/session中具有会话域和安全设置.php但开发站点没有使用HTTPS(SSL / TLS)。这会导致此一般错误,因为默认情况下会话.secure 设置为 true。


答案 2

我在Laravel 5.5中遇到了同样的问题。在我的情况下,它发生在将路由从GET更改为POST之后。问题是因为我在切换到POST时忘记传递CSRF令牌。

您可以通过调用以下命令在表单中发布 CSRF 令牌:

 {{ csrf_field() }}

或者在app/Http/Middleware/VerifyCsrfToken中排除您的路由.php

 protected $except = [
        'your/route'
    ];

推荐