[英]Serve Angular app with express if user is authenticated
我們正在構建僅為我們數據庫中的某些用戶創建的應用。 該應用程序不應該被其他任何人訪問。
我們的想法是提供一個簡單的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
}
});
我們如何將整個角度應用程序發送給用戶?
除非“身份驗證”按鈕在身份驗證過程中有某些用途(例如發送憑據),否則您應該擺脫它並嘗試直接訪問應用程序。 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”標志作為用戶進行身份驗證,因此您可以將中間件交換為更安全的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.