【发布时间】:2016-10-04 11:09:42
【问题描述】:
首先,对不起我的英语不好
我通过这个命令创建了一个新项目:
laravel new blog
然后,我在博客项目中运行了make:auth。
然后我尝试使用这个地址登录博客:
localhost:8000/登录
一切正常,我可以毫无问题地登录博客!
我还创建了用户表并在其中添加了一些用户!
问题:
当我在主机上部署这个非常简单的项目时,问题就开始了。当这个项目部署在主机上并尝试登录时,它让我:
TokenMismatchException in VerifyCsrfToken.php line 67:
这很奇怪,因为它可以在 localhost 上运行,但不能在 Host 上运行!
到目前为止我所做的尝试:
我试图找出用户请求的令牌与会话中的令牌相比在哪里。我发现在以下文件中有一个名为tokensMatch 的方法:
/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php
我将该方法修改为:
protected function tokensMatch($request)
{
$sessionToken = $request->session()->token();
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
$myArray = [ // I added this line
'SessionToken' => $sessionToken,
'RequetedToken' => $token,
];
var_dump($myArray); // I added this line
die(); // I added this line
if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
$token = $this->encrypter->decrypt($header);
}
if (! is_string($sessionToken) || ! is_string($token)) {
return false;
}
return hash_equals($sessionToken, $token);
}
所以,然后我尝试登录本地主机,输出是这样的:
Array
(
[sessionToken] => YhfaZMkbEPwWdYmT4D1kyZeysEhFnltROvMgvRQh
[RequestedToken] => YhfaZMkbEPwWdYmT4D1kyZeysEhFnltROvMgvRQh
)
说明请求的Token和会话的Token相等,可以登录成功。
然后我尝试登录主机,输出是这样的:
Array
(
[sessionToken] => GSXeJSwD1mVSQ5XwgbLjnIk3VfhT5GzsiijfE15e
[RequestedToken] => Nd540vhx5BDidQb2FwudHWRzkK65IIhjgEBcf9ur
)
如您所见,请求的令牌和会话令牌是不同的!所以我无法登录它,它让我遇到了那个可怕的TokenMismatchException 错误!
这对我来说没有意义!我不知道为什么!
任何帮助将不胜感激
更新:
这是我的auth/login.blade.php 文件内容:
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Login</div>
<div class="panel-body">
<form class="form-horizontal" role="form" method="POST" action="{{ url('/login') }}">
{{ csrf_field() }}
<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<label class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input type="email" class="form-control" name="email" value="{{ old('email') }}">
@if ($errors->has('email'))
<span class="help-block">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
<label class="col-md-4 control-label">Password</label>
<div class="col-md-6">
<input type="password" class="form-control" name="password">
@if ($errors->has('password'))
<span class="help-block">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<div class="checkbox">
<label>
<input type="checkbox" name="remember"> Remember Me
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
<i class="fa fa-btn fa-sign-in"></i>Login
</button>
<a class="btn btn-link" href="{{ url('/password/reset') }}">Forgot Your Password?</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
【问题讨论】:
标签: php laravel authentication laravel-5.2 csrf