使用 passport-local 保护 API

Securing an API using passport-local

切入正题。我使用 passport-local 构建了一个安全的应用程序,所有路线都被很好地覆盖了。我的应用程序所做的是从 mongo 获取数据并将其作为 api 服务器提供,进而提供 d3 图表。现在我所有的网页都是安全的,但我可以在不登录应用程序的情况下访问 api。

以下是我的页面在 route.js

中的结构
    app.get('/dashboard', isLoggedIn, function(req, res) {
    res.render('dashboard.html', {
        user : req.user
    });
});

这就是我的 api 代码的样子:

app.get('/api/finanData1', function(req, res) {
  // use mongoose to get all nerds in the database
  Subjects.find({}, {'_id': 0}, function(err, subjectDetails) {
   // if there is an error retrieving, send the error. 
       // nothing after res.send(err) will execute
   if (err) 
   res.send(err);
else
    res.json(subjectDetails); // return all nerds in JSON format
  });
 });

我尝试对 api 代码建模,但没有成功。非常感谢对此的任何帮助。

谢谢。

编辑 回答 isLoggedIn 中间件的问题, 我将 api 代码修改为:

     app.get('/api/finanData1', isLoggedIn, function(req, res) {
  // use mongoose to get all nerds in the database
  Subjects.find({}, {'_id': 0}, function(err, subjectDetails) {
   // if there is an error retrieving, send the error. 
       // nothing after res.send(err) will execute
   if (err) 
   res.send(err);
else
     // return all nerds in JSON format
    res.json(subjectDetails, { 
     user : req.user
        }); 
  });
 });

现在,当我尝试在未登录的情况下访问 api 时,我被带到了完美的登录页面。但是在登录到应用程序后,我的图表不会填充。如果我在登录时打开 api link,我将收到此响应,而不是应该存在的 json 数据:

 {"user":{"_id":"55f2f701f26336d85c28012b","__v":0,"local":{"password":"a$Z69k5PqxWQi5jxFNm2g/xOIAG/QG9L1ud/lO0kJHhDWQWPm2Zfl4e","email":"anmol.koul@wincere.com"}}}

我也应该共享我的服务器文件吗?

您从 api 获得的响应正是您传递给 json 响应助手的响应:

{ user : user_serialized }

将您的 res.json 行改回简单的 return 结果:

res.json(subjectDetails)

如果除了数据之外还需要用户,您必须 return 一个更复杂的对象,然后映射到客户端上的数据 属性 以绘制图表:

var response = {
    data: subjectDetails,
    user: req.user
};

res.json(response);