Javascript Node.JS授权

Javascript Node.JS授权,javascript,node.js,express,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)

我想用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/

您可以使用express中间件进行身份验证

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');
});
您可以使用身份验证提供程序

然后您可以注册一些身份验证中间件,如下所示:

//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);
});

希望这有帮助。

什么不起作用?或者你在哪一部分需要帮助?我认为这个逻辑应该放在前端而不是后端。请参阅。@Himanshumital我正在创建webGL游戏,它将更易于使用后端。@KittyHowk请查看我的答案,并告诉我是否有助于/解决您的问题。@Codearts抱歉,我不想使用其他库。