我有一个 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,您可以使用 djangoHttpResponse
或HttpResponseForbidden
像这样:
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] 删除。
我来说两句