繁体   English   中英

.put方法在摩卡咖啡请求中更新密码无效

[英].put method for updating password in mocha chai requests not working

我的代码:

const model = require('../db/models/user');
const describe = require('mocha').describe;
const assert = require('chai').assert;
const chaiHttp = require('chai-http');
let chai = require('chai');
let server = require('../server');

chai.use(chaiHttp);

describe('Test user registration, login, update password', () => {
    beforeEach((done) => {
        // Reset user mode before each test
        model.User.remove({}, (err) => {
            console.log(err);
            done();
        })
    });

现在,我得到了错误

UnhandledPromiseRejectionWarning:TypeError:无法读取null的属性“ _id”

在路线本身中,具体是:

router.put('/me/update-password', async (req, res, next) => {
    const {body} = req;
    const auth = req;
    const userId = auth._id; // problem on this line!

// rest of code...

});

因此,在注册并登录后(应该可以正常工作!),我在更新密码时遇到了很多问题。 params我将发送生成的令牌,在body是带有新密码的密码字段。 在实时示例(例如Postman)上,它可以正常工作,但在测试中,它根本不能工作。

我真的不知道,已经失去了很多时间(3天)。

有人可以看看建议解决方案吗?

非常感激。

使用auth.js更新:

const jwt = require('jsonwebtoken');

const isAu = function(req) {
  return jwt.verify(req.headers.authorization.split(' ')[1], 'secret', function (err, decoded) {
    if (err) {
      return null;
    }

    return decoded;
  });
};

module.exports = isAu;

编辑:由于OP回答后已更改原始问题,因此这里是原始链接: https : //stackoverflow.com/revisions/55064109/1

======================================

JWT验证方法接受Authorization令牌-您正在通过拆分Authorization标头字符串来正确地获取该令牌,以获取令牌。

HTTP授权标头字符串包含身份验证方案类型(Bearer,Basic,Digest等)和令牌值

Authorization: Bearer eyJhbGciOiJIUzI1NiIXVCJ9...TJVA95OrM7E20RMHrHDcEfxjoYZgeFONFh7HgQ

但是您在Chai请求中的Authorization标头仅包含令牌的值,而不包含身份验证方案类型。

假设您的身份验证方案为Bearer ,则需要在Chai请求授权标头中进行设置:

...
chai.request(server)
 .put('/api/me/update-password')
 .set('Authorization', `Bearer ${token}`)
 .send(`${updatedPassword}`)
 .end((error, response) => {
    assert.equal(response.status, 200);
    done();
 });
...

另一方面,如果您未在请求授权标头中指定身份验证类型,则应像这样将其发送给JWT以进行验证:

const isAuthenticated = function(req) {
  return jwt.verify(req.headers.authorization, 'secret', function (err, decoded) {
    if (err) {
      return null;
    }

    return decoded;
  });
}; 


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM