Laravel 5.2.31中API的TokenMismatchException

时间:2016-05-23 05:26:36

标签: php laravel laravel-5 laravel-5.1 laravel-5.2

我在尝试什么?

我已经有了一个网站,我正在为相同代码的API尝试基于令牌的身份验证,以下是样本身份验证代码的开始

我在下面创建了一个控制器代码。

class AccountController extends \App\Http\Controllers\Controller
{
    public function apilogin($UserData) {
        return json_decode($UserData);
    }
}

我的路线配置如下。

Route::group(['prefix' => 'api/v1', 'middleware' => 'auth.api'], function () {
    Route::post('/apilogin', 'API\User\Account\AccountController@apilogin');
});

**然后从邮差Chrome扩展程序中,我发布了请求,并且如果我在Kernel.php中的$ middlewareGroups中评论以下行,则工作正常

\App\Http\Middleware\VerifyCsrfToken::class,

如果我从POSTMan Extension

执行GET请求,我没有问题VerifyCsrfToken

3 个答案:

答案 0 :(得分:7)

打开您的app\http\Middleware\VerifyCsrfToken.php文件。

此处使用以下内容编辑$except属性

protected $except = [
  'api/*' 
];

这将从CSRF验证中排除您的api路由。

答案 1 :(得分:0)

在你的route.php中设置代码

Route::group(['prefix' => API_PREFIX,'middleware' => 'auth.api'], function() 
{
 // Your Route
}

在你的kernal.php设置中间件下面,最好为api使用不同的中间件。

'auth.api' => \App\Http\Middleware\ApiAuthenticate::class,

添加新中间件 ApiAuthenticate.php

class ApiAuthenticate
{
    public function handle($request, Closure $next, $guard = 'api')
    {
        if (\Auth::guard($guard)->guest()) {
            return response("Invalid user");
        }
        else {
            return $next($request);  
        }
        return $next($request);
    }
}

检查你的获取和发布方法

答案 2 :(得分:0)

TokenMismatchException通常在csrf标记不存在于表单或过期的csrf标记或篡改csrf标记时发生。

首先:

确保以表格

添加
<input type="hidden" name="_token" value="{{ csrf_token() }}">

清除尝试使用清除缓存的视图文件

检查流程中是否有重定向

最后,如果您想要自定义此错误,则一切都会失败。您可以在hanlers中处理此错误。检查[this][1]