javascript – Passport JWT auth在单元测试中 – socket挂断
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Passport JWT auth在单元测试中 – socket挂断,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2469字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试用Authorization标题来测试使用护照的JWT策略的受保护路线.
我尝试过axios,supertest,superagent,我得到了同样的错误 – ‘socket hang up’:
Error: socket hang up
at createHangUpError (_http_client.js:253:15)
at Socket.socketOnEnd (_http_client.js:345:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickDomainCallback (internal/process/next_tick.js:122:9) code: 'ECONNRESET', response: undefined }
这在dev环境中完美地工作,这只发生在测试环境中 – 单元测试或dev env指向测试DB /用户.
我知道这个错误意味着连接因服务器崩溃或语法错误而关闭,但是没有语法错误.端点未通过护照身份验证:
passport.authenticate(“智威汤逊…
为什么?怎么解决这个问题?
终点:
router.route('/private')
.get(
passport.authenticate('jwt', { session: false }), (req, res, next) => {
res.json({ allTheThings: true });
})
考试:
describe('GET /api/private', () => {
it('should work', () => {
const USER_JWT_VALID = 'JWT asdf.....';
let instance = axios.create();
instance.defaults.headers.common['Authorization'] = USER_JWT_VALID;
return instance.get('http://localhost:3000/api/private')
.then((response) => {
expect(response.data).to.be.an('object'); // response.data undefined
}).catch((error) => {
console.log('err ', error); //socket hang up
});
});
});
如果我删除passport.authenticate并只是发送一个json响应,它按预期工作.
日志显示请求与Authorization标头中的正确JWT一起发送.
RE评论
我有一个不同的开发和测试用户/用户.使用dev中的测试数据库,我能够复制单元测试中出现的问题.如果我排除授权标头,正如预期的那样,我得到一个“未授权”响应(来自令牌检查功能).
一旦我用JWT添加授权标题,我根本得不到任何回复:(
进一步调试
在测试环境中,如果有授权标头,我的api似乎无法再执行任何GET请求.没有标题,一切正常.我怀疑这与最近的一些依赖更新有关.
解决方法:
在为测试环境创建一个全新的用户并在单元测试中使用它之后,一切都按预期工作.使用Authorization标头中的用户JWT的GET请求可以完美地工作.
似乎在测试环境(来自mongo db)中用于身份验证的用户以某种方式使用了无效的JWT.可能与基于用户模式构建JWT的方式有关.
我不知道为什么或如何发生这种情况(早期构建阶段).现在无法复制.
我的单元测试正在执行以下操作:
1)POST到身份验证端点以获取JWT令牌(来自用户的电子邮件和密码)
2)使用该JWT获取仅具有私有auth的端点.
在私人GET上,passport.authenticate(‘jwt’….根本就没有工作,因此没有请求或回复.
除了无效的JWT之外,我看不出为什么这不起作用的任何其他原因.
我从中了解到,如果您在进行身份验证时遇到失败的单元测试,请排除旧用户/新用户并从中进行操作.
内容总结
以上是互联网集市为您收集整理的javascript – Passport JWT auth在单元测试中 – socket挂断全部内容,希望文章能够帮你解决javascript – Passport JWT auth在单元测试中 – socket挂断所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。