如果用户通过身份验证,则使用express提供Angular应用程序

时间:2017-08-14 15:03:01

标签: node.js angular express

我们正在构建仅为我们数据库中的特定用户创建的应用。该应用程序不应该被其他任何人访问。

我们的想法是提供一个简单的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
  }
});

我们如何将整个角度应用程序发送给用户?

1 个答案:

答案 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”标记作为用户进行身份验证,因此您可以将中间件交换为更安全的内容。