无服务器授权程序异步等待无法正常工作

时间:2018-06-04 20:54:00

标签: async-await serverless-framework

我一直在使用无服务器应用程序使用Node 6,我决定迁移到async / await,因为版本8.x已经发布。

Altough,我遇到了授权器功能的问题。由于我删除了回调参数并只返回了值,因此它停止工作。如果我向回调参数发送一些内容,它会保持正常工作,但它不是async / await-like。即使我抛出异常,它也无法正常工作。

module.exports.handler = async (event, context) => {

    if (typeof event.authorizationToken === 'undefined') {
        throw new InternalServerError('Unauthorized');
    }

    const decodedToken = getDecodedToken(event.authorizationToken);
    const isTokenValid = await validateToken(decodedToken);

    if (!isTokenValid) {
        throw new InternalServerError('Unauthorized');
    } else {
        return generatePolicy(decodedToken);
    }
};

有关如何进行的任何建议吗?

谢谢你们!

2 个答案:

答案 0 :(得分:3)

我在这里遇到了同样的问题。似乎授权者还不支持异步/等待。一种解决方案是获取整个async / await函数并在处理程序中调用。像这样:

const auth = async event => {
    if (typeof event.authorizationToken === 'undefined') {
        throw new InternalServerError('Unauthorized');
    }

    const decodedToken = getDecodedToken(event.authorizationToken);
    const isTokenValid = await validateToken(decodedToken);

    if (!isTokenValid) {
        throw new InternalServerError('Unauthorized');
    } else {
        return generatePolicy(decodedToken);
    }
}
module.exports.handler = (event, context, cb) => {
    auth(event)
      .then(result => {
         cb(null, result);
      })
      .catch(err => {
         cb(err);
      })
};

答案 1 :(得分:0)

对于2020年抵达这里的人们-现在按OP所述工作。