How to log out by deleting token django api

Submitted 3 years, 7 months ago
Ticket #169
Views 378
Language/Framework Django
Priority High
Status Closed

How to delete token of the recently logged 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):

try:

user_token = request.auth

refresh_tokens = RefreshToken.objects.filter(access_token=user_token)

refresh_tokens.delete()

user_token.delete()

return Response('success')

except Exception as error:

return Response({"message": str(error), "success": False},

status=status.HTTP_200_OK)

Submitted on Sep 14, 20

Kindly edit question and use right code format for coding sections - Vengat 3 years, 7 months ago

Follow up on my last comment. In order to investigate further, kindly update your question with right code format. - Vengat 3 years, 7 months ago

as we dont get any response on this ticket. We will initiate the close request for this ticket. - Vengat 3 years, 7 months ago
add a comment


Latest Blogs