在群集模式下使用PM2运行Strongloop时出现AUTHORIZATION_REQUIRED错误

时间:2016-07-21 17:32:17

标签: cluster-computing restful-authentication strongloop pm2 angular-fullstack

我使用PM2作为我的流程管理器运行Strongloop。

  • pm2 start server / server.js -i 0 (在群集模式下启动strongloop)。
  • pm2 list (显示两个具有不同PID的服务器实例)。 pm2 list image example

在我的Angular-fullstack应用程序中:

  • 使用电子邮件和密码运行POST ,以获取令牌,ttl等。 回复是正确的: {"id":"z2MgpdN2dyXHHWw2DLhAI026vHBgxw43jpCz9khWa7U9GykAmnQZAaeXV2nvEvQ8","ttl":1209600,"created":"2016-07-21T16:47:34.020Z","userId":"571609e4c88c6db26b75aacd"}
  • 使用ID(令牌)运行GET 调用以获取有关该用户的更多信息:http://myrestservice.com:3000/api/Users/571609e4c88c6db26b75aacd?access_token=z2MgpdN2dyXHHWw2DLhAI026vHBgxw43jpCz9khWa7U9GykAmnQZAaeXV2nvEvQ8 响应为错误401 AUTHORIZATION_REQUIRED

问题!!: 如何配置StrongLoop来处理同一服务器/ server.js的多个实例? 我读到了配置存储的REDIS会话,但指南讨论了Express + REDIS存储的会话管理。我认为这是一种不同的方法。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您似乎没有将AccessTokens持久保存在所有正在运行的服务器/进程的公共数据源上。

尝试检查您的model-config.json文件,并验证是否共享了AccessToken模型的dataSource。

这可能不会在您的所有服务器/进程之间共享:

"AccessToken": {
  "dataSource": "memory",
  "public": false
},

这将在您的所有服务器/进程之间共享:

"AccessToken": {
  "dataSource": "mysqlDs",
  "public": false
},

* mysqlDs存储在MySQL上的地方

这是配置数据源https://docs.strongloop.com/display/public/LB/Attaching+models+to+data+sources#Attachingmodelstodatasources-Makethemodelusethedatasource

的Loopback文档的相关部分