【问题标题】:How to handle oauth2 and csrf token laravel如何处理 oauth2 和 csrf 令牌 laravel
【发布时间】:2017-04-16 01:32:57
【问题描述】:

我在我的项目中安装了 Laravel 5.2 和 oAuth2 Server Laravel 。我必须对网站和 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 路由和网络路由。提前致谢。

【问题讨论】:

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


    【解决方案1】:

    您必须对以 api 开头的路由禁用 csrfToken 验证才能编辑您的 app/Http/Middleware/VerifyCsrfToken.php 文件并在 $except 数组中添加 api/* 来自 laravel 应用程序仓库的示例文件如下所示

    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.
        })
    
    });
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 2018-07-17
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      相关资源
      最近更新 更多