express.js / Node.Js中的用户身份验证

时间:2014-02-23 23:32:29

标签: javascript node.js express authorization

我在我的应用程序中运行Node.Js / Express.Js时出现用户身份验证问题

基本上,当用户登录主界面(html)时,会显示一个图表,该图表是通过API路径(/ api / data / json)获得的,这也需要通过

进行身份验证。

exports.auth = express.basicAuth(User.authenticate);

在routes / api.js

我尝试通过传递res.locals.user参数之一来“告诉”路由/ api.js用户已被授权,但它没有帮助......

所以我的问题是:在Node.Js中是否有任何方法可以将用户的登录详细信息存储在会话变量中(例如,您可以在PHP中执行),以便在需要授权时将其传递给所有组件,避免用户在访问应用的其他部分时需要重新授权?

谢谢!

2 个答案:

答案 0 :(得分:1)

basicAuth中间件在身份验证成功时使用用户名填充req.user。检查用户是否在之后出现的任何中间件上进行了身份验证,例如在routes/api.js中,您所要做的就是检查是否定义了req.user

if (req.user) {
    // User is already auth'ed; provide secret data
} else {
    // Proceed to next middleware to provide a standard error message
    next();
}

或者,您也可以使用res.redirect('/goToOtherpage')重定向到另一条路线,或者您可以使用res.send(401)的HTTP错误回复,向来电者发出Unauthorized信号。

答案 1 :(得分:0)

不确定这是否有用,但您可以挂钩到HTML5会话存储。这是一篇文章进一步介绍。

http://www.nczonline.net/blog/2009/07/21/introduction-to-sessionstorage/

以下是一篇关于如何使用它的文章的例子。

//save a value
sessionStorage.setItem("name", "Nicholas");

//retrieve item
var name = sessionStorage.getItem("name");

//get the key name for the first item
var key = sessionStorage.key(0);

//remove the key
sessionStorage.removeItem(key);

//check how many key-value pairs are present
var count = sessionStorage.length;