laravel_token 对第一个请求有效,但对后续请求无效
laravel_token is valid for first request but not subsequent requests
我已经安装了 Laravel Passport 并根据文档进行了配置。从我的 VueJS 文件调用 axios.get
时,第一次调用按预期工作。 laravel_session
Request 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 被拒绝? **
我通过从 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?我这样做安全吗?
我已经安装了 Laravel Passport 并根据文档进行了配置。从我的 VueJS 文件调用 axios.get
时,第一次调用按预期工作。 laravel_session
Request 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 被拒绝? **
我通过从 API 路由中删除 web
中间件解决了这个问题。为什么它首先在那里,我不知道。
我从
更改了我的 api.phpRoute::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?我这样做安全吗?