一尘不染

如何使用PassportJS保护API端点?

angularjs

我的应用程序使用Express和AngularJS。我正在使用express通过静态处理角度代码的基本网络设置。角度代码使用的服务会影响express托管的API端点。我只希望用户经过身份验证后才能访问API端点。如何通过PassportJS完成此操作?


阅读 228

收藏
2020-07-04

共1个答案

一尘不染

我已经在github上上传了一个Angular-Express 项目

仍在进行中。希望对您有所帮助。

它使用PassportJs进行用户身份验证,并且是服务器端授权的基本示例。它演示了如何使API调用仅对经过身份验证的用户或具有管理员角色的用户可用。这在实现server/routes.js调用中间件功能ensureAuthenticated,并且ensureAdmin其在所定义server/authentication.js

在routes.js中

// anybody can access this 
app.get('/api/test/users', 
        api.testUsers);


// only logged-in users with ADMIN role can access this 
app.get('/api/users',          
        authentication.ensureAdmin,
        api.testUsers);

// only logged-in users can access this
app.get('/api/books', 
        authentication.ensureAuthenticated, 
        api.books);

在authentication.js中

ensureAuthenticated: function(req, res, next) {
    if (req.isAuthenticated()) {
       return next();
    } else {
       return res.send(401);
    }
},

ensureAdmin: function(req, res, next) {
  // ensure authenticated user exists with admin role, 
  // otherwise send 401 response status
  if (req.user && req.user.role == 'ADMIN') {
      return next();
  } else {
      return res.send(401);
  }
},
2020-07-04