我正在尝试使用Parse Server建立一个简单的身份验证系统:
app.js
...
app.get('/login', (req, res) => {
res.render('login.ejs');
});
app.post('/login', (req, res) => {
console.log('POST /login\t' + util.inspect(req.body));
driver.login(req, (err, user) => {
//Here, user is defined
if(err) {
res.redirect('/login');
} else {
res.redirect('/user');
}
});
});
...
driver.js:
...
function login(req, callback) {
var username = req.body.username,
password = req.body.password;
Parse.User.logIn(username, password, {
success: (user) => {
callback();
},
error: (user, error) => {
callback(JSON.stringify(error));
}
});
}
function isLoggedIn(req, callback) {
console.log('isLoggedIn?');
console.log(util.inspect(req.user)); //undefined
if(req.user) {
callback();
} else {
callback('Not logged in');
}
}
...
当我访问/login
时,我可以正常登录,并被重定向到/user
而没有任何错误,但在使用/user
作为中间件的isLoggedIn
上, req.user
未定义。
我在搜索时看到其他人遇到同样的问题,但是旧帖子(< 2015),使用JSSDK的其他部分(反应/浏览器),或者只是没有得到任何答案。
我知道我可以使用session,并且每次都会根据它重新创建用户,但感觉非常hackish,它真的是受支持的方式吗?
答案 0 :(得分:2)
您有两条路由可以使用REST-full服务器,这意味着用户在路由呼叫,STATE-full和使用会话之间不会持久。
幸运的是,已经构建了一个非常好的nodejs认证中间件,它将处理所有这些会话管理。这称为passportJS。可以在此处找到文档:http://passportjs.org/docs
您不仅可以通过本地登录进行身份验证,还可以支持使用google,facebook,github等进行身份验证。这是通过所谓的策略完成的。你使用google-strategy来获得google oauth,facebook-stradegy for facebook oauth等。
您要寻找的是本地策略,这称为此策略,因为您希望使用本地用户凭据进行身份验证。可以在此处找到此策略:https://www.npmjs.com/package/passport-local
您需要本地护照和护照,并且只需安装
即可npm install passport passport-local
从那里,只需浏览我上面链接的文档,了解如何设置所有内容。