为各种用户实现重复的服务器功能

时间:2017-08-19 13:55:29

标签: node.js express single-sign-on backend

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

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')
  }
});

然而,我意识到这不起作用,因为服务器代码只运行一次。这意味着如果有多个用户登录,则会导致错误。每次访问网址时如何调用此函数?

1 个答案:

答案 0 :(得分:1)

定义了一条路线,用于告诉服务器在该路线中执行每次操作(GET,POST,PUT,...),而不仅仅是一次。

在此示例中,每次对此服务器@port 3000执行GET时,计数器将增加,服务器将使用当前服务请求数进行响应。

let reduceSafely filteredValues =
    match filteredValues with
    | [] -> None
    | _  -> filteredValues |> List.reduce addToSum

let sumMyList values =
    values |> List.choose id |> reduceSafely