Node.JS授权

时间:2018-01-21 14:51:38

标签: javascript node.js express

我想用auth系统创建一个简单的应用程序。当有人访问我的页面服务器必须返回授权html页面时,访问者可以填写输入并通过socket.io向服务器发送登录名和密码。如果值正确,服务器会向客户端发送第二个html页面。我知道我可以在客户端使用此代码并重定向:

app.get('/page1', function(req, res){
    res.sendFile(__dirname + '/page1.html');
});
app.get('/page2', function(req, res){
    res.sendFile(__dirname + '/page2.html');
});

但我希望用户始终保持相同的地址,必须始终是example.com/

2 个答案:

答案 0 :(得分:2)

您可以使用快速中间件进行身份验证。

function authCheck(req,res,next){
    //Your auth check will be here
    if(isValidUser){
       next();
    }
    else{
      res.sendFile(__dirname + '/login.html');
    }
}

app.get('/afterlogin', authCheck, function(req, res){
    res.sendFile(__dirname + '/afterlogin.html');
});

答案 1 :(得分:1)

您可以将Passport用于身份验证提供程序。

然后你可以像这样注册一些认证中间件:

// auth.js

module.exports = {
    isGuest: (req, res, next) => {
        if (req.isAuthenticated()) {
            res.redirect('/');
        } else {
            next();
        }
    },
    isAuthenticated: (req, res, next) => {
        if (req.isAuthenticated()) {
            next()
        } else {
            res.redirect('/users/login')
        }
    },
};

然后你可以像你这样在你的路线上应用中间件:

// users.js

let express = require('express'),
    router = express.Router(),
    usersController = require('../controllers/usersController'),
    auth = require('../middlewares/auth');

router.get('/register', auth.isGuest, (req, res) => {
    usersController.showRegisterPage(req, res);
});

router.post('/register', auth.isGuest, (req, res) => {
    usersController.register(req, res);
});

router.get('/login', auth.isGuest, (req, res) => {
    usersController.showLoginPage(req, res);
});

router.post('/login', auth.isGuest, (req, res) => {
    usersController.login(req, res);
});

router.post('/logout', (req, res) => {
    usersController.logout(req, res);
});

router.get('/profile/:username', auth.isAuthenticated, (req, res) => {
    usersController.showProfilePage(req, res);
});

希望这有帮助。