如何处理oauth2和csrf令牌laravel

时间:2016-12-01 12:03:19

标签: php laravel oauth oauth-2.0 laravel-5.2

我在项目中安装了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路由并行。提前谢谢。

1 个答案:

答案 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.
    })

});