创建和保存访问令牌simplejwt Django

问题描述

我一直在遵循本教程:https://medium.com/@gerrysabar/implementing-google-login-with-jwt-in-django-for-restful-api-authentication-eaa92e50522d试图从前端实现基于google的登录,到目前为止,一切工作都取决于根据google令牌创建帐户,然后创建令牌使用RefreshToken.for_user()。但是,我尝试通过创建一个非常简单的视图来通过权限类对其进行测试,从而对应用程序进行测试,如下所示:

class VerifyAuthView(APIView):
    permission_classes = (IsAuthenticated,)
    def post(self,request):
        return Response({"status":"true"})

尝试访问此错误时返回401错误我有几个想法,可能是这样的:

  • 我已经在django管理面板中的令牌下注意到,即使创建后也没有列出令牌,也许令牌只是生成而不保存,尽管我不知道为什么
  • 我见过很多人说,这可能与rest_framework权限类有关,尽管到目前为止,更改这些类并没有帮助

我的Views.py(也包含上面的我的VerifyAuthView):

from django.contrib.auth.base_user import BaseUserManager
from django.contrib.auth.hashers import make_password
from rest_framework.utils import json
from rest_framework.views import APIView,status
from rest_framework.response import Response
import requests
from rest_framework_simplejwt.tokens import RefreshToken
from django.contrib.auth.models import User


class GoogleView(APIView):
    def post(self,request):
        payload = {'access_token':request.data.get("access_token")} #validating token
        req = requests.get('https://www.googleapis.com/oauth2/v2/userinfo',params= payload)
        data = json.loads(req.text)

        if 'error' in data:
            content = {'message': 'Invalid Google Token'}
            return Response(content)
        email = data['email']     

        #check if user has authenticated before or not
        try:
            user = User.objects.get(email=data['email'])

        except User.DoesNotExist:
            #Create user if they have not logged in before
            user = User()
            user.username = data['email']
            user.password = make_password(BaseUserManager().make_random_password())
            user.email = data['email']
            user.save()

        #Creating access token for user
        token = RefreshToken.for_user(user)
        response = {}
        response['username'] = user.username
        response['access_token'] = str(token.access_token)
        response['refresh_token'] = str(token)

        return Response(response)

在我的settings.py中,我的rest_framework属性设置如下:

CORS_ORIGIN_ALLOW_ALL = True

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES':[
    #for demo purposes will need to be changed for privacy concerns
        'rest_framework.permissions.AllowAny',],'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',} 

我正在通过axios响应前端中的请求,如下所示:

const headers = { Authorization: 'Bearer ' + accesstoken};
        let res = await axios.post("http://localhost:8000/rest-auth/token/verify-access-token/",{headers}
        );

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)