【问题标题】:Flask-restful - During handling of the above exception, another exception occurredFlask-restful - 在处理上述异常的过程中,又发生了一个异常
【发布时间】:2020-09-05 20:09:51
【问题描述】:

作为 Flask-restful API 的一部分,我有一个登录资源:

class LoginApi(Resource):
    def post(self):
        try:
            body = request.get_json()
            user = User.objects.get(email=body.get('email'))
            authorized = user.check_password(body.get('password'))
            if not authorized:
                raise UnauthorizedError
            expires = datetime.timedelta(days=7)
            access_token = create_access_token(identity=str(user.id), expires_delta=expires)
            return {'token': access_token}, 200
        except DoesNotExist:
            raise UnauthorizedError
        except Exception as e:
            raise InternalServerError

登录路由有4种场景:

  1. 邮箱和密码正确
  2. 数据库中不存在电子邮件 - 在这种情况下,正确引发了 UnauthorizedError。
  3. 电子邮件存在,但密码不正确 - 在这种情况下,我遇到了问题(如下所述)
  4. 其他一些错误 - InternalServerError 已正确引发。

所以对于数字 3 - 我得到的是 InternalServerError,而不是 UnauthorizedError。

if not authorized: 语句工作正常(如果我在那里打印,我可以看到它工作)。但是由于某种原因,我在尝试引发错误时收到以下信息:

在处理上述异常的过程中,又发生了一个异常:

我遇到了this PEP article,它似乎建议更改为raise UnauthorizedError from None,但问题仍然存在。有谁知道我怎样才能成功地实现这个?理想情况下,我希望从场景 2 和 3 中引发相同的错误,否则某人有可能从他们返回的错误中知道数据库中是否存在电子邮件。

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    if 语句引发 UnAuthorized,但这发生在异常中,您必须引发 DoesNotExist 才能使其在异常中引发 UnAuthorized。

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多