即使我提供了承载令牌,NodeJS也无法进行身份验证

时间:2020-02-25 05:27:24

标签: node.js express mongoose

下面的代码由我的jwt文件和user.service文件代码组成。即使我提供了承载令牌,也无法进行身份验证。请帮助我

我的user.service文件

module.exports = {
  authenticate,
  getAll,
  getById,
  create,
  update,
  getByEmail,
  changePassword,
  delete: _delete
};

async function authenticate({ email, password }) {
  const user = await User.findOne({
    email
  });
  if (user && bcrypt.compareSync(password, user.hash)) {
    const { hash, ...userWithoutHash } = user.toObject();
    const token = jwt.sign(
      {
        sub: user.id
      },
      config.secret
    );
    const y = user.lastLoginDate;

    user.lastLoginDate = Date.now();
    const x = user.lastLoginDate;
    Object.assign(user, x);
    await user.save();
    const axyz = user.id;
    const companies = await company.find({ userAccessId: user.id });
    return {
      ...userWithoutHash,
      token,
      companies
    };
  }
}

async function getById(userParam) {
  const user = await User.findOne({
    id: userParam.id,
    defaultAccountId: userParam.defaultAccountId
  });
  if (user) {
    const companies = await company.find({ userAccessId: user.id });
    return {
      user,
      companies
    };
  }
}

async function getByEmail(userParam) {
  return await User.findOne({
    email: userParam.email
  }).select("-hash");
}

async function create(userParam) {
  const users = await User.findOne({
    email: userParam.email
  });
  const user = new User(userParam);

  if (!users) {
    if (userParam.password) {
      user.hash = bcrypt.hashSync(userParam.password, 10);
    }
    await user.save();
    const companies = await company.findOne({ businessUnitId: userParam.defaultAccountId });
    if (companies) {
      const Arrays = companies.userAccessId;
      Arrays.addToSet(user.id);
      await companies.save();
    }

    const { hash, ...userWithoutHash } = user.toObject();
    const token = jwt.sign(
      {
        sub: user.id
      },
      config.secret
    );
    return {
      ...userWithoutHash
    };
  } else {
    const idd = user.id;
    const companies = await company.findOne({ businessUnitId: userParam.defaultAccountId });

    if (companies) {
      const Arrays = companies.userAccessId;
      var index = Arrays.indexOf(users.id);
      if (index > -1) {
      } else {
        Arrays.addToSet(users.id);
        await companies.save();
        return userParam;
      }
    }
  }
}

async function update(userParam, call) {
  const user = await User.findOne({
    id: userParam.id,
    defaultAccountId: userParam.defaultAccountId
  });

  if (user) {
    const users = await User.findOne({ userName: userParam.userName });

    if (!users) {
      if (userParam.userName) {
        user.userName = userParam.userName;
        const x = userParam.userName;
        Object.assign(user, x);
        await user.save(x);
      }
      if (userParam.userRole) {
        user.userRole = userParam.userRole;
        const y = userParam.userRole;
        Object.assign(user, y);
        await user.save(y);
      }
      const { hash, ...userWithoutHash } = user.toObject();
      const token = jwt.sign(
        {
          sub: user.id
        },
        config.secret
      );
      return {
        ...userWithoutHash
      };
    } else {
      throw "User Aldready Exits";
    }
  }
}

async function changePassword(userParam) {
  const user = await User.findOne({
    email: userParam.email
  });

  if (user) {
    if (userParam.password) {
      userParam.hash = bcrypt.hashSync(userParam.password, 10);
    }
    Object.assign(user, userParam);

    return await user.save();
  }
}

async function _delete(userParam) {
  const user = await User.findOne({
    id: userParam.id
  });
  if (user) {
    if (await company.findOne({ userAccessId: user.id })) {
      const companiess = await company.find({ userAccessId: user.id });
      if (companiess) {
        const n = companiess.length;
        for (i = 0; i < n; i++) {
          console.log(i);
          const Arrays = companiess[i].userAccessId;
          console.log(Arrays);
          var index = Arrays.indexOf(user.id);
          if (index > -1) {
            Arrays.splice(index, 1);
            await companiess[i].save();
          }
        }
      }
      return await user.remove();
    }
  }
}

async function getAll(userParam) {
  if (await User.findOne({ defaultAccountId: userParam.defaultAccountId })) {
    const user = await User.find({ defaultAccountId: userParam.defaultAccountId });
    return await user;
  }
}

我的jwt文件:

const expressJwt = require("express-jwt");
const config = require("config.json");
const userService = require("models/v1/user.service");

module.exports = jwt;

function jwt() {
  const secret = config.secret;

  return expressJwt({
    secret,
    isRevoked
  }).unless({
    path: ["/users/login"]
  });
}

async function isRevoked(req, payload, done) {
  const user = await userService.getById(payload.sub);
  if (!user) {
    return done(null, true);
  }

  done();
}

请帮助我解决此问题。以前,当我不与团队集成代码时,它可以工作;在集成代码不起作用之后,我会收到未经授权错误。

1 个答案:

答案 0 :(得分:0)

var decoded = jwt.verify(token, "someSecretKey");
console.log(decoded) // bar

// verify a token symmetric
jwt.verify(token, "someSecretKey", function(err, decoded) {
  console.log(decoded.foo) // bar
});

// invalid token - synchronous
try {
  var decoded = jwt.verify(token, 'wrong-secret');
} catch(err) {

}


jwt.verify(token, 'wrong-secret', function(err, decoded) {

});