如果用户isLoggedin使用node和express,则限制登录页面访问

时间:2016-07-02 17:15:23

标签: node.js express

登录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)。

怎么做?

2 个答案:

答案 0 :(得分:0)

1

在登录API存储响应对象(res)中的用户信息。

2

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逻辑

希望有帮助,加油!