我 正在 尝试 转换 我 找到 的 一 段 代码 ( 使用 python-social-auth ) , 使 其 处理 JWT 身份 验证 , 而 不是 简单 的 令牌 身份 验证 。
下面 是 代码 :
@api_view(http_method_names=['POST'])
@permission_classes([AllowAny])
@psa()
def oauth_exchange_token_view(request, backend):
serializer = SocialAccessTokenSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
# set up non-field errors key
try:
nfe = "non_field_errors"
except AttributeError:
nfe = 'non_field_errors'
try:
# this line, plus the psa decorator above, are all that's necessary to
# get and populate a user object for any properly enabled/configured backend
# which python-social-auth can handle.
user = request.backend.do_auth(serializer.validated_data['access_token'])
except HTTPError as e:
# An HTTPError bubbled up from the request to the social auth provider.
# This happens, at least in Google's case, every time you send a malformed
# or incorrect access key.
return Response(
{'errors': {
'token': 'Invalid token',
'detail': str(e),
}},
status=status.HTTP_400_BAD_REQUEST,
)
if user:
if user.is_active:
token, _ = Token.objects.get_or_create(user=user)
return Response({'access': token.key})
else:
return Response(
{'errors': {nfe: 'This user account is inactive'}},
status=status.HTTP_400_BAD_REQUEST,
)
else:
return Response(
{'errors': {nfe: "Authentication Failed"}},
status=status.HTTP_400_BAD_REQUEST,
中 的 每 一 个
正如 您 在 上面 的 代码 中 所 看到 的 , 令牌 的 返回 方式 如下 :
token, _ = Token.objects.get_or_create(user=user)
return Response({'access': token.key})
格式
但是 我 希望 它 使用 djangorestframework-simplejwt 返回 一 个 JWT 。
2条答案
按热度按时间bxfogqkk1#
终于找到了解决办法:
ogsagwnx2#
你不需要为simplejwt编写视图,只需在文档中一步一步地进行,对于大多数用例来说,“入门”配置simplejwt就足够了。