DRF 异常“NotAuthenticated”引发 500 内部服务器错误代替 401/403

萨加尔·阿加瓦尔

我有一个 Django 中间件,用于验证 Firebase IDToken。

from rest_framework import exceptions

def process_request(request):
    ...
    try:
        decoded_token = auth.verify_id_token(id_token)
        uid = decoded_token['uid']
    except:
        raise exceptions.NotAuthenticated(detail='not authenticated')

当验证失败时,auth 会引发异常,该异常会被 try except 块捕获。但不是引发 401/403 错误,而是由 NotAuthenticated 引发 500 Internal Server Error。

是不是因为 DRF Exceptions 的一些工作导致了这种情况?

女主播

DRF 处理发送状态代码 401 或 403,具体取决于从您的视图中引发 ( NotAuthenticated, PermissionDenied)的异常

但是由于您使用的是中间件,因此 DRF 已经不在考虑范围内了。您引发的任何默认情况下未捕获或处理的异常都将被视为服务器错误,因此会给您一个500.

如果您希望您的中间件返回 401 或 403,您可以使用 djangoHttpResponseHttpResponseForbidden像这样:

from django.http.response import HttpResponse, HttpResponseForbidden

class MyMiddlware:
    def process_request(request):
        try:
            decoded_token = auth.verify_id_token(id_token)
            uid = decoded_token['uid']
        except Exception:
            return HttpResponseForbidden('not authenticated')
       # or return HttpResponse('not authenticated', status=401)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章