使用带护照和快递的可选授权路线

Posted

技术标签:

【中文标题】使用带护照和快递的可选授权路线【英文标题】:Using optionally authorized routes with passport and express 【发布时间】:2019-12-19 17:40:03 【问题描述】:

我想让一些当前经过身份验证的路由可选地进行身份验证。因此,在我的路由上,我可以通过以下方式简单地将公共中间件添加到我的路由器:

.get('/projects/:id', public)

我当前的 app.js 流程如下所示:

// Authentication
app.use(authRoute);

app.use(defaultRouter);

// request handling
app.all('*', defaultRequestHandler);

因此,默认情况下,我的所有路由都经过身份验证,并且在我的 authRoute 中我进行了护照身份验证,我将用户 ID 分配给请求。

使用前面的流程,我能想到的唯一方法是在身份验证失败时为 authRoute 中的请求分配一个匿名用户 ID。还要在 authRoute 和路由器之间添加另一个中间层,它从列表中检查请求 url 是否是公共路由。有没有更简单的方法?谢谢!

【问题讨论】:

【参考方案1】:

我是这样做的:

您的结构如下所示:

-controllers
-helpers
-public
-routes 
--index.js 
--api 
--- index.js 
--- subscriber.js
-views

在 app.js 中:

app.use('/', './routes/index');

在 index.js 文件中的目录路由中

const express = require('express');
const router = express.Router();
router.use(middleware(),require('./api');
router.use(require('./auth');
module.exports = router;

在 index.js 文件中的目录 routes/api 中

const express = require('express')
const router = express.Router();
router.use('/subscriber', require('./subscriber'));
module.exports = router;

因此,目录 API 中的每个 Route 都在使用 auth 中间件。 当您添加需要控制身份验证的新路由时,您可以在目录“./api/”的 index.js 文件中添加新路由 其他所有路由都在另一个文件夹中定义。

【讨论】:

以上是关于使用带护照和快递的可选授权路线的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 护照公共 api 路线

护照认证失败导致重定向循环

Passport.js 可选身份验证

node.js 试图让护照和 ExtraxtJwt 工作

node.js试图让护照和ExtraxtJwt工作

快递路线参数条件