我在项目中安装了Laravel 5.2和oAuth2 Server Laravel
。我必须为web-site和web-api使用相同的功能。对于网站我的功能正常工作,但当我使用相同的功能web-api显示错误TokenMismatchException in VerifyCsrfToken.php line 67:
。
我的路线
/* for web*/
Route::post('admin/user_login', 'Auth\AuthController@authenticate');
/* for mobile api */
Route::group(['prefix'=>'api/','before' => 'oauth'], function()
{
Route::post('/user/login', 'Auth\AuthController@authenticate');
});
当我将此控制器用于Web时,此代码工作正常,但当我调用API时,显示错误。我怎么能处理这个?我必须使用 oAuth 路由和web路由并行。提前谢谢。
答案 0 :(得分:2)
你必须为以api开头的路由禁用csrfToken验证才能编辑你的app/Http/Middleware/VerifyCsrfToken.php
文件并在$ except数组中添加api/*
laravel app repo中的示例文件如下所示
https://github.com/laravel/laravel/blob/5.2/app/Http/Middleware/VerifyCsrfToken.php
只需要像
那样<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'api/*'
];
}
您还必须从身份验证路由中删除oauth中间件,因为在身份验证期间令牌不可用,因此路由如下所示
Route::group(['prefix'=>'api/'], function()
{
Route::post('/user/login', 'Auth\AuthController@authenticate');
Route::group(['middleware' => 'oauth'], function() {
// routes which needs oauth token verification.
})
});