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',
                    .
                    .
                  ];

这应该有效。

也有这个问题!解决方法:

  1. 正在清除浏览器会话存储和 cookie。
  2. 运行 php artisan cache:clear
  3. 确保 storage/framework/sessions 文件夹是空的,除了 .gitignore
  4. 正在重新启动开发环境。

将此代码添加到您的

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