【问题标题】:ExpressJS redirect user with data without EJSExpressJS 使用没有 EJS 的数据重定向用户
【发布时间】:2019-09-09 00:53:26
【问题描述】:

我想创建一个登录系统,使用 Node JS 和 ExpressJS。用户键入他们的凭据,然后服务器检查这些凭据以查看它们是否有效。如果它们有效,服务器将重定向用户主页并发送数据,包括用户的凭据(以供进一步使用)。这是 RESTful。

const app = require("express")();
const bodyParser = require('body-parser');
app.get("/login", function(req, res)
{
    res.sendFile(__dirname + "/front-end/login.html");
});
app.post("/login",function(req, res)
{
    var username = req.body.username;
    var password = req.body.password;
    //returns whether the credentials work
    var credentialsPassed = checkCredentials(username,password);
    if(credentialsPassed)
    {
        //redirect to home-page and pass along the user's credentials for further use
    }
});

我已经读过How do I redirect in expressjs while passing some context?。答案在 url 中发送数据。但是,我需要发送用户的凭据,因此在 URL 中传递它是不安全的。另一种选择是使用 EJS(或类似的东西),但我必须为这 1 个任务下载一个相当大的模块。

有没有更好的办法?

【问题讨论】:

  • 如果您没有在 URL 中传递数据,那么您的选择是将数据放入 cookie 或用户会话(由 cookie 键入)中。在任何一种情况下,您都可以在该用户的下一个请求(来自重定向的请求)到达时访问数据。将数据放在用户会话中通常更安全,因为会话保存在服务器上。
  • 您在其他 cmets 中谈到不在服务器上存储任何内容,并且不知何故认为这是您必须做的纯 REST。你根本不能两者兼得。您可以将请求所需的所有内容都放在 URL 中,或者在 URL 中放置一些可以附加到某些服务器端数据的令牌,或者使用 cookie。这些是做到这一点的方法。没有什么不是 REST 只是因为您登录然后在 cookie 或指向服务器上的用户会话的 URL 中有一个令牌。

标签: node.js rest express


【解决方案1】:

如果您不希望在 URL 中传递数据,可以将其添加到 req.users 或 res.locals/req.locals.Definition: [req.locals vs. res.locals vs. res.data vs. req.data vs. app.locals in Express middleware

在您传递的链接中,他们说您可以将该数据保存在 req.session 中,这也许是解决您的问题的最佳方法

【讨论】:

  • 我调查了这些。看起来这些将临时信息存储到服务器上,以便当新连接到来时,它可以使用刚刚存储的信息。这很好,但我想要一个 REST api,这意味着每个请求都不能使用服务器上的东西。
  • 好的,如果您想共享用户信息,您是否尝试过使用 json 网络令牌? Passport 可以简化很多流程:medium.com/front-end-weekly/…
猜你喜欢
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2021-12-18
  • 2013-07-10
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
相关资源
最近更新 更多