Laravel 5.5 登录和注册页面 says:The 页面因不活动而已过期。[TokenMismatchException]
Laravel 5.5 login and register page says:The page has expired due to inactivity.[TokenMismatchException]
我刚刚使用 laravel installer.And 运行 命令“php artisan 创建了一个 laravel 版本 5.5 的新项目make:auth”。视图和控制器是为用户生成的 authentication.And 也 运行 “php artisan migrate " 创建 database.When 访问登录页面和注册页面所需的表格,填写表格并 submit.It 显示 "The page has expired due to inactivity. Please refresh and try again."。但是刷新页面没有任何帮助。
看源码,哪里出现异常:
if ($e instanceof ModelNotFoundException) {
$e = new NotFoundHttpException($e->getMessage(), $e);
} elseif ($e instanceof AuthorizationException) {
$e = new AccessDeniedHttpException($e->getMessage());
} elseif ($e instanceof TokenMismatchException) {
$e = new HttpException(419, $e->getMessage());
}
似乎 "TokenMismatchException" 导致了这个问题。
这是什么时候发生的?为什么?我只是创建了这个新项目,没有做任何其他更改。
希望你得到了分数。
我使用 php 7.1.9(laravel 5.5 需要 php > 7.0.0)。并在开发环境 with:php artisan serve
中服务该项目
确保您的 User.php
模型存在于 app 文件夹中,并且必须在此模型中定义字段。
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
我在 localhost:8000
(php artisan serve
) 上遇到了同样的问题。也许是巧合,但试试“clean browser”,而不是你在以前的开发中使用过的。
对我来说它有效。
问题似乎出在使用以前的 Laravel 版本开发的 cookie 上,在相同的 url.
我想你错过了 csrf 令牌。
别忘了使用 {!! csrf_field() !!}
我遇到了同样的问题。
vagrant reload --provision
为我工作
添加 csrf 令牌
<input type="hidden" name="_token" value="{{ csrf_token() }}">
这似乎是任一存储的权限设置 and/or bootstrap/cache。
我正在使用 Cloudways 服务器。我在“应用程序设置”下重置了我服务器上的权限,现在可以使用了。在我的本地开发服务器上,等效项是在存储上设置 chmod 777。我以前使用过 755,但错误仍然存在。
就我而言,我收到了相同的错误消息,然后发现我错过了添加 csrf_token
{{ csrf_field() }}
或者没有表单助手,
<input type="hidden" name="_token" value="{{ csrf_token() }}">
如果还是不行,那么-
刷新浏览器缓存 希望它能正常工作,谢谢。
如果你新建了一个项目localhost 你需要查看
config/session 行:166
如果 'secure' => true ,你需要编辑 'secure' => false,
当您启动主机或服务器时,重新配置 => true
对不起,我懂一点英语,希望能帮到你
我遇到了同样的问题,这是因为我使用的是虚拟主机,并且我将下面的变量设置为 mydomain.com。在 config/session.php 文件中
'domain' => env('SESSION_DOMAIN', 'mydomain.com'),
当我将其更改为 null 后它开始工作
'domain' => env('SESSION_DOMAIN', 'null'),
我不知道它背后的原因是什么,但它现在工作正常。
我还会将 csrf_token
保留在元标记中。
<meta name="csrf-token" content="{{ csrf_token() }}">
我只测试 post 对我的 api 的请求,但遇到了同样的问题。
我通过将我的路由添加到中间件 VerifyCsrfToken
的 $except
数组来解决它,即转到 app/Http/Middleware/VerifyCsrfToken
并添加
protected $except = [
'your/route'
];
但是如果你的请求来自于一些前端平台或视图,建议在发送请求的表单中添加{{ csrf_field() }}
。
您好,您想要应用到每个人的组路径,请使用此方法,这是我的 5.5 幼虫版本。使用星号 =>
转到 app/Http/Middleware/VerifyCsrfToken 并添加
protected $except = [
'/user/*'
];
这也是我用户的路径
Route::group(['prefix' => 'user', 'namespace' => 'User', 'as' => 'user.'] , function (){
这个问题主要是因为您的表单中没有csrf token。
在 csrf 令牌验证过程中失败,这就是您获得此页面的原因。 Laravel 通常需要所有形式的 csrf 令牌。
您只需将其添加到表单中即可添加 csrf 令牌。
{{ csrf_field() }}
另一种方法是您可以在 verifycsrftoken 中间件中排除您的路由。
只需在中间件中添加一个受保护的字段,其中包含您的路由名称。
protected $except=[
'1st route',
'2nd route',
.
.
];
这应该有效。
也有这个问题!解决方法:
- 正在清除浏览器会话存储和 cookie。
- 运行
php artisan cache:clear
- 确保
storage/framework/sessions
文件夹是空的,除了 .gitignore
。
- 正在重新启动开发环境。
将此代码添加到您的
app\Exceptions\Handler.php file
if ($exception instanceof \Illuminate\Session\TokenMismatchException) {
// Perform operation on page expired
}
在你的全局处理程序中试试这个 app/Exceptions/Handler。php
public function render($request, Exception $e)
{
if ($e instanceof \Illuminate\Session\TokenMismatchException) {
return redirect('/login');
}
return parent::render($request, $e);
}
抱歉稍后再回答
我在网上搜索后遇到了同样的问题,找到了两个解决方案
1-添加
@csrf
或
<input type="hidden" name="_token" value="{{ csrf_token() }}">
如果丢失,在您的表单中
2:如果长时间打开登录页面没有登录,请刷新浏览器或按ctrl+F5
我刚刚使用 laravel installer.And 运行 命令“php artisan 创建了一个 laravel 版本 5.5 的新项目make:auth”。视图和控制器是为用户生成的 authentication.And 也 运行 “php artisan migrate " 创建 database.When 访问登录页面和注册页面所需的表格,填写表格并 submit.It 显示 "The page has expired due to inactivity. Please refresh and try again."。但是刷新页面没有任何帮助。 看源码,哪里出现异常:
if ($e instanceof ModelNotFoundException) {
$e = new NotFoundHttpException($e->getMessage(), $e);
} elseif ($e instanceof AuthorizationException) {
$e = new AccessDeniedHttpException($e->getMessage());
} elseif ($e instanceof TokenMismatchException) {
$e = new HttpException(419, $e->getMessage());
}
似乎 "TokenMismatchException" 导致了这个问题。 这是什么时候发生的?为什么?我只是创建了这个新项目,没有做任何其他更改。 希望你得到了分数。 我使用 php 7.1.9(laravel 5.5 需要 php > 7.0.0)。并在开发环境 with:php artisan serve
中服务该项目确保您的 User.php
模型存在于 app 文件夹中,并且必须在此模型中定义字段。
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
我在 localhost:8000
(php artisan serve
) 上遇到了同样的问题。也许是巧合,但试试“clean browser”,而不是你在以前的开发中使用过的。
对我来说它有效。
问题似乎出在使用以前的 Laravel 版本开发的 cookie 上,在相同的 url.
我想你错过了 csrf 令牌。
别忘了使用 {!! csrf_field() !!}
我遇到了同样的问题。
vagrant reload --provision
为我工作
添加 csrf 令牌
<input type="hidden" name="_token" value="{{ csrf_token() }}">
这似乎是任一存储的权限设置 and/or bootstrap/cache。
我正在使用 Cloudways 服务器。我在“应用程序设置”下重置了我服务器上的权限,现在可以使用了。在我的本地开发服务器上,等效项是在存储上设置 chmod 777。我以前使用过 755,但错误仍然存在。
就我而言,我收到了相同的错误消息,然后发现我错过了添加 csrf_token
{{ csrf_field() }}
或者没有表单助手,
<input type="hidden" name="_token" value="{{ csrf_token() }}">
如果还是不行,那么-
刷新浏览器缓存 希望它能正常工作,谢谢。
如果你新建了一个项目localhost 你需要查看 config/session 行:166 如果 'secure' => true ,你需要编辑 'secure' => false, 当您启动主机或服务器时,重新配置 => true 对不起,我懂一点英语,希望能帮到你
我遇到了同样的问题,这是因为我使用的是虚拟主机,并且我将下面的变量设置为 mydomain.com。在 config/session.php 文件中
'domain' => env('SESSION_DOMAIN', 'mydomain.com'),
当我将其更改为 null 后它开始工作
'domain' => env('SESSION_DOMAIN', 'null'),
我不知道它背后的原因是什么,但它现在工作正常。
我还会将 csrf_token
保留在元标记中。
<meta name="csrf-token" content="{{ csrf_token() }}">
我只测试 post 对我的 api 的请求,但遇到了同样的问题。
我通过将我的路由添加到中间件 VerifyCsrfToken
的 $except
数组来解决它,即转到 app/Http/Middleware/VerifyCsrfToken
并添加
protected $except = [
'your/route'
];
但是如果你的请求来自于一些前端平台或视图,建议在发送请求的表单中添加{{ csrf_field() }}
。
您好,您想要应用到每个人的组路径,请使用此方法,这是我的 5.5 幼虫版本。使用星号 => 转到 app/Http/Middleware/VerifyCsrfToken 并添加
protected $except = [
'/user/*'
];
这也是我用户的路径
Route::group(['prefix' => 'user', 'namespace' => 'User', 'as' => 'user.'] , function (){
这个问题主要是因为您的表单中没有csrf token。 在 csrf 令牌验证过程中失败,这就是您获得此页面的原因。 Laravel 通常需要所有形式的 csrf 令牌。 您只需将其添加到表单中即可添加 csrf 令牌。
{{ csrf_field() }}
另一种方法是您可以在 verifycsrftoken 中间件中排除您的路由。
只需在中间件中添加一个受保护的字段,其中包含您的路由名称。
protected $except=[
'1st route',
'2nd route',
.
.
];
这应该有效。
也有这个问题!解决方法:
- 正在清除浏览器会话存储和 cookie。
- 运行
php artisan cache:clear
- 确保
storage/framework/sessions
文件夹是空的,除了.gitignore
。 - 正在重新启动开发环境。
将此代码添加到您的
app\Exceptions\Handler.php file
if ($exception instanceof \Illuminate\Session\TokenMismatchException) {
// Perform operation on page expired
}
在你的全局处理程序中试试这个 app/Exceptions/Handler。php
public function render($request, Exception $e)
{
if ($e instanceof \Illuminate\Session\TokenMismatchException) {
return redirect('/login');
}
return parent::render($request, $e);
}
抱歉稍后再回答 我在网上搜索后遇到了同样的问题,找到了两个解决方案
1-添加
@csrf
或
<input type="hidden" name="_token" value="{{ csrf_token() }}">
如果丢失,在您的表单中
2:如果长时间打开登录页面没有登录,请刷新浏览器或按ctrl+F5