如何使用Express for android app在node.js中实现服务器端会话?

时间:2015-10-09 19:13:53

标签: android node.js session redis express-session

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

  1. 快速会话(虽然它只适用于开发,但不适用于生产,但不适用于我的应用)
  2. Cookie的会话
  3. 连接-Redis的
  4. 连接-蒙戈
  5. 我也听说过json web令牌,我可以生成唯一的令牌,然后我可以使用res.json将令牌传递给客户端({user_id:" user1",token:" generated_token here"}) 我也听说过护照,但不知道怎么做呢同样在护照中我默认使用快递会对生产有好处吗?

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

    实际上我没有得到控制流,我的意思是如何在node.js中的会话中发生一切。这个秘密是什么产生独特的令牌或什么。我的意思是我的应用程序现在注册了大约100000个用户,请相应地告诉我应该用于我的应用程序。

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

    我知道我提出的这个问题很模糊,但请耐心等待,我只是想了解node.js中如何使用会话

    谢谢Anways

1 个答案:

答案 0 :(得分:4)

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

此特定方案的最佳选择是查看云提供。例如,Azure App Service Mobile Apps允许您实现身份验证 - 它最终返回一个JSON Web令牌(http://jwt.io)来验证每个请求。

如果您不想受到云提供商的青睐,但又希望自己运行它,那么您将不得不实施令牌生成并自行检查。这通常遵循以下形式:

  • 设置一个WebAPI端点(可能是/ signin),它接受身份提供者为您提供的任何令牌,验证信息并返回JWT - 有一个NPM模块(jsonwebtoken)用于生成JWT。确保JWT包含您的用户身份。我倾向于使用电子邮件地址作为身份。
  • 您的Android应用程序将使用授权标头向您的后端发出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);