我的本地计算机上的Sanctum Auth系统运行良好,并且没有错误。但是我部署的应用程序在授权用户时遇到了麻烦。当我登录时,它发送一个获取用户数据的请求,然后进行重定向。身份验证完成后,您将被重定向,并且该应用发出GET请求以获取更多数据。此GET路线使用laravel圣所来保护。但是后端未注册用户已成功尝试登录,因此它发送401未经授权错误。这是一些代码...
来自store.js的loadUser操作
actions: {
async loadUser({ commit, dispatch }) {
if (isLoggedIn()) {
try {
const user = (await Axios.get('/user')).data;
commit('setUser', user);
commit('setLoggedIn', true);
} catch (error) {
dispatch('logout');
}
}
},
}
routs.js上的Route Guard检查以查看isLoggedIn(这只是本地的布尔存储)
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
// if (to.meta.requiresAuth) {
if (isLoggedIn()) {
next();
} else {
next({
name: 'home'
});
}
} else {
next();
}
})
有人指出,我忘记了bootstrap.js中axios的withCredetials设置。我做了此添加,但问题仍然存在。
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.withCredentials = true;
在服务器端路由中间件防护(这是请求被拒绝的地方)
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('trucks', 'Api\TruckController');
});
在laravel cors.php配置文件中,我将“ supports_credentials”从false
更改为true
'supports_credentials' => true,
在我看来,cookie信息未通过api调用(但是我真的不确定)。此设置在我的本地计算机上有效,但在我部署到的服务器上无效。
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1')),