登录api:
api.post('/login', function(req, res) {
User.findOne({
username: req.body.username
}).select('password').exec(function(err, user) {
if(err) throw err;
if(!user) {
res.send({ message: "User doesn't exist."});
} else if(user) {
var validPassword = user.comparePassword(req.body.password);
if(!validPassword) {
res.send({ message: "Invalid password."});
} else {
/////// token
var token = createToken(user);
res.json({
success: true,
message: "Successfully logged in.",
token: token
});
}
}
});
});
中间件:
api.use(function(req, res, next) {
console.log("somebody just came to our app.");
var token = req.body.token || req.param('token') || req.headers['x-access-token'];
// check if token exists
if(token) {
jsonwebtoken.verify(token, secretKey, function(err, decoded) {
if(err) {
res.status(403).send({ success: false, message: "failed to authenticate user."});
} else {
req.decoded = decoded;
next();
}
});
} else {
res.status(403).send({ success: false, message: "no token provided."});
}
});
authService:
authFactory.login = function(username, password) {
return $http.post('/api/login', {
username: username,
password: password
})
.success(function(data) {
AuthToken.setToken(data.token);
return data;
})
}
authFactory.isLoggedIn = function() {
if(AuthToken.getToken())
return true;
else
return false;
}
现在,如果我的用户已登录并且他尝试访问:localhost:3000 / login,那么他应该被重定向到localhost:3000 /
只有在他退出后,他才能访问登录页面(类似于facebook)。
怎么做?
答案 0 :(得分:0)
在登录API存储响应对象(res)中的用户信息。
app.get('/',function(req,res){
if(req.user){
res.redirect('/login');
} else {
res.render('home');
}
});
推荐:PASSPORT及其Local-Strategy。
答案 1 :(得分:0)
obj.write
在您的登录路径上,在中间件功能内添加逻辑。您也可以在注册页面上输入相同的内容。
exports.loginPage = (req, res) => {
if(req.session.user){
res.redirect("/");
} else {
res.render("loginPage");
}
};
关键要点是:如果您不希望用户在您的网站上看到页面,请转到页面的路径,添加if / else逻辑。
希望有帮助,加油!