针对不同用户的重复服务器功能实现

Repeated server function implementation for various users

我有一个 node.js 应用程序,我正在为其实施自定义 SSO 登录系统。它的工作原理是它获取用户的 GET 参数(用户名、真实姓名和电子邮件)以及由我的其他服务器上的 API 生成的签名。我的代码应该做的是获取用户的 url GET 参数,连接它们,然后用私钥加密它们。然后,它将加密结果与签名进行比较。如果相等,则 returns 为真,用户已登录。我的代码如下。

app.get('/', function(req, res) {
  if(!signedIn){
  try{
    var user = req.query.username;
    var name = req.query.realName;
    var email = req.query.email;
    var signature = req.query.signature;
    var encrypted = crypto.createHmac('sha256', config.privateKey).update(user + name + email).digest('hex');
    if(encrypted == signature){
      username = user;
      signedIn = true;
      res.sendFile(__dirname + '/view/index.html');
    }else{
      res.redirect("https://infinia.press/sso/login")
    }
  }catch(error){
    res.redirect("https://infinia.press/sso/login")
  }
  }
  else{
    res.sendFile(__dirname + '/view/index.html')
  }
});

但是,我意识到这行不通,因为服务器代码只运行一次。这意味着如果不止一个用户登录,就会导致错误。每次访问 url 时如何调用此函数?

定义了一个路由,用于告诉服务器每次在该路由中执行一个操作(GET,POST,PUT,...),而且不止一次。

在本例中,每次在端口 3000 上对该服务器执行 GET 操作时,计数器都会增加,并且服务器会以当前服务的请求数进行响应。

const express = require('express')
const app = express()
var totalRequests = 0;

app.get('/', function (req, res) {
  totalRequests++
  res.send('Hello Request #'+totalRequests)
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})