我使用基于Yeoman生成器的MEAN堆栈,并且我尝试使用密码保护我的api端点。
我希望能够在同一端点上使用本地和基本策略,因此我可以从外部源调用API并在我的webapp中使用它。
然而,当我实现这个时,我一次只能使用一个策略,因为基本身份验证是"无状态"这意味着没有附加会话。
到目前为止,我使用此代码获得了2个不同的端点和2种不同的策略:
router.get('/all-basic', passport.authenticate(['local','basic'],{ session: false }), controller.index);
router.get('/all-local', auth.isAuthenticated(), controller.index);
我想知道是否有任何其他方法或最佳做法尝试在同一端点上使用2种策略,或者我只需要调用2个不同的端点。
谢谢! 安德烈斯奥索里奥
答案 0 :(得分:0)
经过多次尝试,我发现了一个解决方案。
我使用了第二个终点:
router.get('/all-local', auth.isAuthenticated(), controller.index);
我用邮递员提出了两个请求:
一个用于登录尝试,(如果您使用的是基于Yeoman的MEAN堆栈),要调用的端点是:
/auth/local
请注意,您应该使用x-www-form-urlencoded和两个键值属性(电子邮件和密码)进行POST调用。端点将返回您需要存储的令牌,以便进行后续调用。
下一步是调用端点本身,我向/ all-local发出了一个GET请求,我添加了一个名为Authorization的标头,其值为 Bearer [token] ,将[token]替换为第一次调用时的令牌值。
希望它有所帮助。