我正在尝试使用 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');
}
});
});
...
驱动程序.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的另一部分( react /浏览器),要么只是没有得到任何答案。
我知道我可以使用 session ,并基于此每次重新创建用户,但这感觉真的很黑客,这真的是受支持的方式吗?
最佳答案
您有两条路线要走,要么有一个 REST-full 服务器,这意味着用户在路线调用、STATE-full 和使用 session 之间不是持久的。
幸运的是,已经构建了一个非常好的 Nodejs 身份验证中间件,可以处理所有这些 session 管理。这就是所谓的passportJS。文档可以在这里找到:http://passportjs.org/docs
您不仅可以通过本地登录进行身份验证,还支持通过google、facebook、github等进行身份验证。这是通过所谓的策略来完成的。您可以使用 google-strategy 来进行 google oauth,使用 facebook-stradegy 来进行 facebook oauth,等等。
您需要的是本地策略,之所以这样称呼,是因为您想使用本地用户凭据进行身份验证。该策略可以在这里找到:https://www.npmjs.com/package/passport-local
您将需要护照和本地护照,并且只需运行即可安装
npm install passport passport-local
从那里,只需浏览我上面链接的文档即可了解如何设置所有内容。
关于javascript - 解析服务器登录返回一个用户,但 req.user 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949526/