簡體   English   中英

Node.JS授權

[英]Node.JS authorization

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

您可以使用快速中間件進行身份驗證。

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

您可以使用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);
});

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM