2

大家好,我正在制作一个android应用程序,我一次有多个帐户登录现在我的问题是我要进行多个登录,我应该使用会话来验证每个登录的帐户用户。现在我在服务器端使用快递我已经阅读了很多关于在 node.js 中存储会话的文档

  1. Express-session(虽然它只适用于开发,但不适用于生产,但不适用于我的应用程序)
  2. Cookie 会话
  3. 连接 Redis
  4. 连接-mongo

我还听说过 json Web 令牌,我可以在其中生成唯一令牌,然后我可以使用 res.json({user_id:"user1", token: "generated_token here"}) 将令牌传递给客户端 我还听说过护照但不知道如何做到这一点,因为在护照中我默认使用 express-session 是否对生产有好处?

现在我的第一个问题是我已经阅读了所有文档,但没有提到我为每个注册的用户创建唯一令牌的地方。第二个问题,当我将我的服务器用于 android 应用程序时,将不会使用 cookie 我将发送用户令牌,如参数 req.body.token 现在如何使用当前 user_id 来计算它。

实际上我没有得到控制流,我的意思是在 node.js 的会话中一切是如何进行的。还有什么是这个秘密是这个东西产生独特的令牌或什么。另外我的意思是现在大约有 100000 名用户注册了我的应用程序,请相应地告诉我我应该为我的应用程序使用哪种方式。

我之前已经问过这个问题,但我没有提到因为我没有制作网站如何做到这一点(在我的情况下不会使用令牌)

我知道我要问的这个问题非常含糊,但请多多包涵,我只是想了解 node.js 中如何使用会话

谢谢 Anways

4

1 回答 1

4

我会尝试回答这个问题,但它是模糊的(正如你所指出的)。我将假设您的 Android 应用程序是本机 Android 应用程序,并且将连接到基于 ExpressJS 的云中某种 NodeJS 后端。如果不是这种情况,请在更新您的问题时澄清您的想法。

对于这种特定情况,最好的办法是查看云提供。例如,Azure App Service 移动应用程序允许您实现身份验证 - 它最终返回一个 JSON Web 令牌 ( http://jwt.io ) 来对每个请求进行身份验证。

如果您不想受制于云提供商,而是想自己运行它,您将不得不实现令牌生成并自己检查。这通常遵循以下形式:

  • 设置一个 WebAPI 端点(可能是 /signin),它接受身份提供者给你的任何令牌,验证信息并返回一个 JWT - 有一个 NPM 模块(jsonwebtoken)用于生成 JWT。确保 JWT 包含您的用户的身份。我倾向于使用电子邮件地址作为身份。
  • 您的 Android 应用程序将使用 Authorization 标头向您的后端发出 WebAPI 请求,其值为“Bearer”
  • 您的 NodeJS API 将使用 JWT 授权来验证 JWT 并提取用户身份,以便您可以在 API 逻辑中使用它。

在这个特定场景中需要注意的重要一点是您的后端代码正在实现一个 WebAPI——API 中没有 cookie 或会话。唯一将用户从客户端代码链接到后端代码的是 JWT。

作为一小段代码,以下是验证 JWT 的方法:

var express = require('express');
var app = express();
var jwt = require('express-jwt');

var jwtCheck = jwt({
  secret: new Buffer('your-jwt-secret', 'base64'),
  audience: 'your-jwt-audience'
});

app.get('/api/protected', jwtCheck, (req, res) => {
// Your code here
});

app.listen(process.env.PORT || 3000);
于 2015-10-09T20:52:35.633 回答