Javascript Node.JS授权
我想用auth系统创建一个简单的应用程序。当有人访问我的页面服务器必须返回授权html页面时,访问者可以填写输入并通过socket.io向服务器发送登录名和密码。若值正确,服务器将向客户端发送第二个html页面。我知道我可以使用此代码并在客户端重定向: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)
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抱歉,我不想使用其他库。