簡體   English   中英

如果用戶通過身份驗證,則使用express提供Angular應用程序

[英]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.

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