通过 api.php 的路由未经授权返回,而通过 web.php 的相同路由有效
Routes going through api.php returning unauthorised whereas the same route going through web.php works
我有一个页面允许用户创建 'folders'。我正在使用下面的函数来获取属于每个用户的所有文件夹,因此当用户登录时,他们应该看到他们所有的文件夹,但看不到其他用户的文件夹。
/**
* Retrieve all user folders
*
* @return Response
*/
public function getAll()
{
// notes associated to folder included
return Folder::where('user_id', Auth::user()->id)->get();
}
这是用于加载所有文件夹的 vue 页面的样子:
<template>
<v-app id="inspire">
<v-card v-for="folder in folders" :key="folder.id">
<v-card-text>
Name: {{ folder.name }}
</v-card-text>
</v-card>
</v-app>
</template>
<script>
import { mapState } from "vuex";
export default {
computed: {
...mapState(['folders'])
},
mounted() {
this.$store.dispatch('getAllFolders');
}
};
</script>
getAllFolders 方法如下所示:
getAllFolders() {
apiClient.get(window.routes['folders.getAll'])
.then(function(response){
console.log(response)
})
.catch(function(error){
console.error(error);
});
},
将路由添加到 web.php 有效并允许每个用户查看他们的相关文件夹:
Route::get('folders/get-all', 'FolderController@getAll')->name('folders.getAll');
但是将其添加到 api.php 会导致未经授权的错误:
Route::middleware(['auth:api'])->group(function () {
Route::get('folders/get-all', 'FolderController@getAll')->name('folders.getAll');
Route::apiResource('folders', FolderController::class);
});
我可能做错了什么?
Api 路由是无状态的,它们专为来自第 3 方的请求而设计,并且需要一个身份验证令牌,您可以使用 Laravel Sanctum.
等包生成该令牌
参见:https://laravel.com/docs/8.x/sanctum#api-token-authentication
如果您从自己的前端执行 ajax 请求,那么这会增加不必要的复杂性。坚持 web.php
,它不应用 api 中间件,并添加您自己的前缀,这样您就可以区分 html 和 ajax 端点。即'/data/user_folders'
.
我有一个页面允许用户创建 'folders'。我正在使用下面的函数来获取属于每个用户的所有文件夹,因此当用户登录时,他们应该看到他们所有的文件夹,但看不到其他用户的文件夹。
/**
* Retrieve all user folders
*
* @return Response
*/
public function getAll()
{
// notes associated to folder included
return Folder::where('user_id', Auth::user()->id)->get();
}
这是用于加载所有文件夹的 vue 页面的样子:
<template>
<v-app id="inspire">
<v-card v-for="folder in folders" :key="folder.id">
<v-card-text>
Name: {{ folder.name }}
</v-card-text>
</v-card>
</v-app>
</template>
<script>
import { mapState } from "vuex";
export default {
computed: {
...mapState(['folders'])
},
mounted() {
this.$store.dispatch('getAllFolders');
}
};
</script>
getAllFolders 方法如下所示:
getAllFolders() {
apiClient.get(window.routes['folders.getAll'])
.then(function(response){
console.log(response)
})
.catch(function(error){
console.error(error);
});
},
将路由添加到 web.php 有效并允许每个用户查看他们的相关文件夹:
Route::get('folders/get-all', 'FolderController@getAll')->name('folders.getAll');
但是将其添加到 api.php 会导致未经授权的错误:
Route::middleware(['auth:api'])->group(function () {
Route::get('folders/get-all', 'FolderController@getAll')->name('folders.getAll');
Route::apiResource('folders', FolderController::class);
});
我可能做错了什么?
Api 路由是无状态的,它们专为来自第 3 方的请求而设计,并且需要一个身份验证令牌,您可以使用 Laravel Sanctum.
等包生成该令牌参见:https://laravel.com/docs/8.x/sanctum#api-token-authentication
如果您从自己的前端执行 ajax 请求,那么这会增加不必要的复杂性。坚持 web.php
,它不应用 api 中间件,并添加您自己的前缀,这样您就可以区分 html 和 ajax 端点。即'/data/user_folders'
.