当前,我正在尝试为我的Web应用程序构建一个API,其中包括构建注册和登录路由。目前,注册路由工作正常,但是,我无法实现一种通过JSON响应管理登录请求的好方法。最终,我将对Vue应用程序使用此API。但是,我不知道该怎么做。
这是一些代码,包括我的模型和当前代码。
型号:
const mongoose = require("mongoose"),
passportLocalMongoose = require("passport-local-mongoose");
const userSchema = new mongoose.Schema({
email: String,
username: String,
password: String,
avatarURL: String,
secret: String,
isAdmin: { type: Boolean, default: false },
classes: [String],
date: { type: Date, default: Date.now },
});
userSchema.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", userSchema);
这是我的路由代码...我需要添加JSON响应并为用户提供会话
router.post('/login',
passport.authenticate('local', {
successRedirect: '/todolist',
failureRedirect: '/login',
})
);
这全部使用护照框架。对于认证格式,我愿意接受其他建议。如果有更好的解决方法,请回复。
答案 0 :(得分:0)
您可以使用express-session:
// Use the session middleware
app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
// Access the session as req.session
app.get('/', function(req, res, next) {
if (req.session.views) {
req.session.views++
res.setHeader('Content-Type', 'text/html')
res.write('<p>views: ' + req.session.views + '</p>')
res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>')
res.end()
} else {
req.session.views = 1
res.end('welcome to the session demo. refresh!')
}
})
您可以通过执行req.session.newEmailAttribute = "example@gmail.com
之类的操作来向会话对象添加属性。通常,您应该在登录或注册事件上执行此操作。然后,当用户发出请求访问应用程序中其他端点的请求时,您将验证该目录是否存在。您可以使用上面的示例中所示的条件语句来验证这一点。
所以在护照上
app.post('/login',
passport.authenticate('local', {
successRedirect: '/todolist',
failureRedirect: '/login',
}),
function(req, res) {
// if this function gets called, the authentication was successful
req.session.email = req.body.email;
}
);
然后,验证用户是否已登录:
app.get('/', (req, res) => {
if(req.session.email) {
// user is logged in!
} else {
// user is not logged in!
}
})