【问题标题】:Laravel token mismatch error after cache clear缓存清除后 Laravel 令牌不匹配错误
【发布时间】:2018-06-13 13:16:49
【问题描述】:

我使用的是 Laravel 5.4 版本

当我清除浏览器缓存并尝试登录时我会问什么,这一次它返回了类似的错误

TokenMismatchException in VerifyCsrfToken.php line 68:

但是当我再次刷新并登录时,它已成功登录,但是每当我清除浏览器缓存并尝试一直登录时,它都会返回错误。任何人都可以帮我解决这个问题吗?

我在v\VerifyCsrfToken.php 中的代码是:

public function handle($request, Closure $next)
{
    if (
        $this->isReading($request) ||
        $this->runningUnitTests() ||
        $this->shouldPassThrough($request) ||
        $this->tokensMatch($request)
    ) {
        return $this->addCookieToResponse($request, $next($request));
    }

    throw new TokenMismatchException;
}

但是当我使用此代码而不是 laravel 默认时:

public function handle($request, Closure $next)
{
    $response = $next($request);

    if (last(explode('\\',get_class($response))) != 'RedirectResponse') {
        $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
    }

    return $response; 
}

它工作正常,这意味着在清除缓存后它允许我登录而不会出现令牌不匹配错误。

我的问题是我不想更改 laravel 的默认代码,那么还有其他方法可以解决这个问题吗?

【问题讨论】:

  • 有人知道吗???
  • 当您清除浏览器缓存时,为 csrf 令牌生成的 cookie 也会被破坏,这就是它显示错误的原因。在这种情况下,您必须刷新页面以便再次生成 csrf 令牌。
  • 是的,你完全明白我的意思,但有没有其他选项不刷新我们可以解决这个?正如我之前所说,上面的代码工作正常,但我不希望对默认 laravel 结构进行任何更改..
  • 首先让我知道确切的要求?
  • @Mayank Pandeyz 浏览器清除后我无法直接登录它显示令牌不匹配错误但刷新页面后一切正常

标签: laravel laravel-5 laravel-5.2 laravel-5.4


【解决方案1】:

在app/Http/Middleware/VerifyCsrfToken.php中,

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}

将注销添加到此数组中:

    protected $except = [
    '/logout'
];

希望这可以解决令牌不匹配异常。谢谢。

【讨论】:

  • 请在浏览器的隐身模式下查看。
  • @ Saibal Roy 我不是在要求那种解决方案,我需要一个适用于所有浏览器的解决方案,所以请帮助我.. 那不是解决方案
猜你喜欢
  • 1970-01-01
  • 2022-08-19
  • 2017-06-06
  • 2021-08-18
  • 2021-10-22
  • 2021-03-16
  • 2021-10-27
  • 2019-10-06
  • 2017-05-13
相关资源
最近更新 更多