Javascript 通过node.js从前端nuxt应用程序请求授权用户时,Laravel API返回401响应

Javascript 通过node.js从前端nuxt应用程序请求授权用户时,Laravel API返回401响应,javascript,php,node.js,laravel,laravel-sanctum,Javascript,Php,Node.js,Laravel,Laravel Sanctum,我正在运行一个nuxt应用程序,并使用Sanctum使用Laravel API进行身份验证。无论是在本地还是在生产环境中,一切都按预期工作(可以成功调用受auth:sanctum中间件保护的API端点),直到我点击刷新。当刷新应用程序清除vuex存储(我的授权用户所在的位置)时,我的身份验证状态将被清除 为了解决这个问题,我在我的nuxt应用程序中运行中间件,它运行服务器端(node.js)向Laravel API发出请求,以检索经过身份验证的用户(从浏览器附加会话cookie),并存储响应(经

我正在运行一个nuxt应用程序,并使用Sanctum使用Laravel API进行身份验证。无论是在本地还是在生产环境中,一切都按预期工作(可以成功调用受auth:sanctum中间件保护的API端点),直到我点击刷新。当刷新应用程序清除vuex存储(我的授权用户所在的位置)时,我的身份验证状态将被清除

为了解决这个问题,我在我的nuxt应用程序中运行中间件,它运行服务器端(node.js)向Laravel API发出请求,以检索经过身份验证的用户(从浏览器附加会话cookie),并存储响应(经过身份验证的用户)。这会使经过身份验证的用户保持页面刷新,而不必在本地存储中存储任何内容

async [authActions.AUTH_CHECK]({ commit, state }, req = null) {
  if (req !== null) {
    if (typeof req.headers.cookie !== 'undefined') {
      let cookies = req.headers.cookie
      let response = await user.getAuthenticatedUser(cookies)
      commit(authMutations.SET_AUTH_USER, response.data)
    }
  } else {
    if (state.user == null) {
      return this.$router.push('/login')
    }
  }
} 
这种设置在本地运行良好,但在生产环境中不起作用,我不知道为什么。从node.js发送到Laravel API的请求看起来正常(正确的头、附加的cookie等),但是在生产中,Laravel返回401个未经验证的响应,我的存储被清除

似乎不太可能成为问题的事情。

  • 科尔斯。我能够登录、检索CSRF令牌、存储它、导航和调用受保护的端点,而不会出现任何问题。注销将清除我的存储,重新登录将恢复存储。只有在刷新时,当node.js实例向Laravel发送请求时,才会出现问题。但是这在本地有效,所以我看不出CORS是个问题
  • 圣殿/会话配置。如上所述,在刷新之前,一切都运行得很好;在此之前尝试导航应用程序时,任何错误配置都是显而易见的
什么可能有帮助…

我想在LaravelAPI中找出请求在哪一点无法进行身份验证。我有以下路线:

Route::middleware('auth:sanctum')->group(function () {
  Route::get('/authenticated-user', function () {
      return response()->json(Auth::user());
  });
  /* other routes ommited */
}
在调用Auth::user()方法之前,我能够确定请求被拒绝,因此拒绝请求的是中间件

但是,我不知道如何深入中间件,在请求沿着堆栈传递时进行调试

如果有任何线索,我们将不胜感激——谷歌到处都是对初始配置有疑问的人,因此很难深入挖掘

编辑-

我在apache服务器上设置了一个自定义访问日志,并比较了通过发出的请求。前端的axios与刷新时节点发出的请求。他们不匹配;节点请求以“-”作为源命中apache,这可能导致CORS问题

# Request from front-end app.
Timestamp: [07/Oct/2020:21:48:15 +0000] First Line: "POST /api/timeslots/operationalComments/getByDate HTTP/1.1" Final Status: 200 Referer: "https://atv-centre.webworks.site/admin/dashboard" Accept: "application/json, text/plain, */*\ Content-Type: "application/json;charset=utf-8" Host: \api-atv-centre.webworks.site\ Origin: "https://atv-centre.webworks.site" User-Agent: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0" Cookie: "omitted for brevity"
# Request from node on refresh.
Timestamp: [07/Oct/2020:21:48:17 +0000] First Line: "GET /api/authenticated-user HTTP/1.1" Final Status: 401 Referer: "-" Accept: "application/json, text/plain, */*\ Content-Type: "-" Host: \api-atv-centre.webworks.site\ Origin: "-" User-Agent: "axios/0.20.0" Cookie: ""
这个问题中省略了Cookies,但它们是相同的。也许问题与请求来源有关

编辑2


在本地设置相同的环境并检查日志。本地节点实例也会删除一些头文件,但本地Laravel并不关心-使用经过身份验证的用户进行响应。

为什么不将令牌存储在
本地存储中
?什么问题?用它