我有一个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')
}
});
然而,我意识到这不起作用,因为服务器代码只运行一次。这意味着如果有多个用户登录,则会导致错误。每次访问网址时如何调用此函数?
答案 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