android - 如何在 node.js 中使用 express 为 Android 应用程序实现服务器端 session ?

标签 android node.js session redis express-session

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

  1. Express-session(尽管它只对开发有益,对生产不利,但对我的应用程序不利)
  2. Cookie session
  3. 连接Redis
  4. 连接蒙戈

我还听说过 json 网络 token ,我可以在其中生成唯一 token ,然后我可以使用 res.json({user_id:"user1", token: "generated_token here"}) 将 token 传递给客户端 我也听说过 passport 但不知道它是怎么做到的同样在 passport 中我默认使用 express-session 它是否适合生产??

现在我的第一个问题是我已经阅读了所有文档,但没有提到我为每个注册用户创建唯一 token 的地方。 第二个问题,因为我正在为 Android 应用程序使用我的服务器,所以不会使用 cookie 我将发送用户 token 作为参数 req.body.token 现在如何将其与当前 user_id 进行比较。

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

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

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

谢谢安维

最佳答案

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

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

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

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

在此特定场景中需要注意的重要一点是您的后端代码正在实现 WebAPI - API 中没有 cookie 或 session 。唯一将用户从客户端代码链接到后端代码的是 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);

关于android - 如何在 node.js 中使用 express 为 Android 应用程序实现服务器端 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33045571/

相关文章:

android - 从 XML 布局扩展 ViewPager

android - 如何从两个 JSON 数组中获取 JSON 对象

java - 如何让 getSelectedView() 在 GridView 中工作?

node.js - 有没有办法在meteorjs上接受多部分表单?即图像上传?

javascript - $locationProvider html5mode 导致刷新时出现 "cannot GET"错误 - AngularJS Node 应用程序

node.js - 如何允许 Google App Engine 访问 Google Cloud PostgreSQL

java - 集群环境中 JMS 主题的 HTTP 使用者

php - 如何在一定时间后在 PHP 中使 session 过期?

android - 调试应用程序工作时 flutter apk 崩溃

javascript - 在 Javascript 函数中销毁 PHP SESSION