【问题标题】:laravel_token is valid for first request but not subsequent requestslaravel_token 对第一个请求有效,但对后续请求无效
【发布时间】:2018-10-27 12:48:23
【问题描述】:

我已经安装了 Laravel Passport 并根据文档进行了配置。从我的 VueJS 文件调用 axios.get 时,第一个调用按预期工作。将laravel_sessionRequest Cookie注入到请求中,认证通过,返回资源。

当我再次尝试调用axios.get 方法时,我的问题出现了。我的用例是一个搜索功能。每当用户输入文本字段时,我都会使用以下代码调用/api/banking/accounts/search/{search-term}

remoteMethod(query) {
            if (query !== '') {
                this.loading = true;

                axios.get(
                    `/api/banking/accounts/search/${escape(query)}`
                ).then(res => {
                    this.destinationAccountDirectory = res.data;
                    this.loading = false;
                });
            } else {
                this.destinationAccountDirectory = [];
            }
        },

此代码在路由上没有任何 auth:api 中间件的情况下运行良好,并且第一次使用 auth:api 中间件。从下面的屏幕截图中可以看出,laravel_token 的值发生了变化,并在后续调用 API 时被拒绝。

**我试图删除在护照安装期间添加到web 中间件组的\Laravel\Passport\Http\Middleware\CreateFreshApiToken,这似乎暂时解决了这个问题,直到不久后我收到一个请求的 419。什么可能导致新的 laravel_tokens 被拒绝? **

【问题讨论】:

  • 你使用的是什么版本的 Laravel?网络中间件应该设置正确。
  • 我使用的是 Laravel 5.6。
  • 您是否已将Laravel\Passport\HasApiTokens 特征添加到您的App\User 模型中?你有没有把config\auth.php中的API驱动改成passport?
  • @IlyasDeckers 我有,是的。我的用户模型是 App\Models\Auth\User - 这可能是个问题吗?我已经按照文档中的所有步骤进行了操作,并且对 API 的第一次调用有效,因此在我看来,配置不太可能是问题所在。我真的想弄清楚 \Laravel\Passport\Http\Middleware\CreateFreshApiToken 中间件的用途,因为它似乎是个问题。
  • 这应该不会给您带来任何问题。也许尝试重新安装护照。如果您遵循文档,这应该可以开箱即用。

标签: laravel laravel-5 vue.js axios laravel-passport


【解决方案1】:

我通过从我的 API 路由中删除 web 中间件解决了这个问题。一开始它为什么会在那里,我不知道。

我从

更改了我的 api.php
Route::group([
    'middleware' => [
        'web',
        'auth:api']], function() {

    Route::post('/banking/transactions', 'TransactionController@store');

    Route::get('/banking/accounts', 'BankAccountDirectoryController@index');
    Route::get('/accounts/{account}', 'BankAccountDirectoryController@show');
    Route::get('/banking/accounts/search/{term?}', 'BankAccountDirectoryController@search');
});

Route::group([
    'middleware' => [
        'auth:api']], function() {

    Route::post('/banking/transactions', 'TransactionController@store');

    Route::get('/banking/accounts', 'BankAccountDirectoryController@index');
    Route::get('/accounts/{account}', 'BankAccountDirectoryController@show');
    Route::get('/banking/accounts/search/{term?}', 'BankAccountDirectoryController@search');
});

API 路由应该在 web 组下以受益于中间件,还是纯粹为了 UI?我这样做安全吗?

【讨论】:

猜你喜欢
  • 2017-10-30
  • 2012-01-24
  • 2023-03-14
  • 2017-01-14
  • 2014-09-18
  • 1970-01-01
  • 2020-09-27
  • 2018-10-27
  • 1970-01-01
相关资源
最近更新 更多