我们正在构建仅为我们数据库中的特定用户创建的应用。该应用程序不应该被其他任何人访问。
我们的想法是提供一个简单的HTML文件,其中包含有关我们所拥有应用的一些信息。我们应用程序的后端应该是nodejs,它应该检查用户是否有我们的身份验证API提供的cookie并附加到我们的域。如果用户有cookie,我们应该为他们提供app文件夹。
如果未经过身份验证,我们希望保护我们的js文件和属于该应用的所有文件。
在简单的HTML文件中,我们基本上应该有一个按钮:"我已通过身份验证,让我浏览应用程序"。
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Landing page</title>
</head>
<body>
<h1>Landing page app!!!</h1>
<input onclick="location.href='/app';" type="submit"
value="I'm authenticated, let me browse the app!"/>
</body>
</html>
节点服务器有一个名为/app
的路由。
const express = require('express');
const app = express();
const port = process.env.PORT || 9090;
const fs = require('fs');
app.use(express.static('public')); //only contains index.html
app.listen(port, (err) => {
if (err) {
console.log(err);
}
});
app.get('/app', (req, res) => {
if(req.user.isAuthenticated){
//Psuedo code below
res.send(WholeAngularAppToUser());
}
else{
// User should stay on landing page
// with information about that they are not authenticated
}
});
我们如何将整个角度应用程序发送给用户?
答案 0 :(得分:3)
除非“我已通过身份验证”按钮在身份验证过程中起到某种作用(例如发送凭据),否则您应该摆脱它并尝试直接访问应用程序。 Angular应用程序通常作为静态文件提供,因此您应将其设置为受某些中间件保护的静态路由:
app.use('/app', function(req, res, next) {
if (req.user.isAuthenticated) {
next()
} else {
res.sendFile(path.join(__dirname, 'public/index.html'))
}
})
app.use('/app', express.static('/app');
当然,您不会在请求中接受一些“isAuthenticated”标记作为用户进行身份验证,因此您可以将中间件交换为更安全的内容。