0

I want to get access token and delete it in logout api.But i am unable to get access token for the current log in user.

models.py

class MyUserManager(BaseUserManager):

def create_user(self, email, password=None, **extra_fields):
    
    if not email:
        raise ValueError('Users must have an email address')

    account = self.model(
        email=self.normalize_email(email),

    )
    account.account_type = extra_fields.get('account_type')
    account.set_password(password)
    account.save(using=self._db)                
    return account

def create_superuser(self, email, password, **extra_fields):
    
    account = self.create_user(
        email,
        password=password,
    )
    account.account_type = 'A'
    account.is_admin = True
    account.save(using=self._db)
    return account

class Account(AbstractBaseUser):

type_choice = (
               ('A', 'Admin'),
               ('S','Student'),
               ('T','Teacher'),
               )
email = models.EmailField(
    verbose_name='email address',
    max_length=255,
    unique=True,
)
account_type = models.CharField(choices=type_choice, max_length=1, null=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()

USERNAME_FIELD = 'email'

def __str__(self):
    return self.email

def has_perm(self, perm, obj=None):
    return True

def has_module_perms(self, app_label):
     return True

@property
def is_staff(self):
    return self.is_admin

#views.py

class AccountViewSet(viewsets.ViewSet):

def create(self,request):
    # permission_classes = [TokenHasReadWriteScope]
    try:
        email=request.data.get('email')
        password=request.data.get('password')
        print(request.data)
        # account_type=request.data.get('account_type')
        if not all([email,password]):
            raise Exception('All Fields are mandatory')

        obj=Account()
        obj.email=email
        obj.set_password(password)
        
        obj.save()
        Application.objects.get_or_create(user=obj, client_type=Application.CLIENT_CONFIDENTIAL,
                                              authorization_grant_type=Application.GRANT_PASSWORD)
        token = get_access_token(obj)
        return Response({"response":token, "success": True}, status=status.HTTP_200_OK)
    
    except Exception as error:
        traceback.print_exc()
        return Response({"message": str(error), "success": False}, status=status.HTTP_200_OK)
    

def list(self,request):
    try:
        user=Account.objects.all()
        users=[]

        for i in user:
            users.append({
                "name":i.name,
                "Address":i.Address,
                "account_type":i.account_type,
            })
        return Response({"success":True, "users":users})
    
    except Exception as error:
        traceback.print_exc()
        return Response({"message": str(error), "success": False}, status=status.HTTP_200_OK)

def retrieve(self, request, pk=None):
        user = Account.objects.get(id=pk)
        data = {
            "name":user.name,
            "email":user.Address,
            #"password" : user.password,
            #"date_of_birth":user.date_of_birth,
            "account_type":user.account_type
            
        }
        return Response({"data":data,"success":True})


def destroy(self, request, pk=None):
    employee = Account.objects.get(id=pk).delete()
    print('>>>>>>>>>>',employee)
    #employee.delete()
    return Response({"success":'done',"message":"delete called"})

class LoginViewSet(viewsets.ViewSet):

def create(self,request):

    try:    
        
        email = request.data.get('email')
        password = request.data.get('password')
        print(email,password)
        if not all([email,password]):
            raise Exception('all fields are mandatory')
        acc = Account.objects.get(email = email)
        print(acc.check_password(password))
        account = authenticate(username=email,password=password)
        print(account)
        if account is not None:
            token = get_access_token(account)
            obj = Account.objects.get(email=account)
            data = {
                "email":account.email,
                
            }
        else:
            raise Exception('Credential not matched')
        return Response({"message": "Login Successfully", "user_info": data, "token": token, "Success": True}, status = status.HTTP_200_OK)
    
    except Exception as error:
        traceback.print_exc()
        return Response({"message":str(error),"success":False},status = status.HTTP_200_OK)

class LogoutViewSet(viewsets.ViewSet): def list(self, request, format=None):

    accesstoken=AccessToken.objects.get(token=request.META.get('HTTP_AUTHORIZATION'))
    
    
    return Response('response',status=status.HTTP_200_OK)
Ashu
  • 1
  • 1
  • 3

0 Answers0