如何解决如何获取和删除访问令牌Django API
我想获取访问令牌并在注销api中将其删除。但是我无法获取当前登录用户的访问令牌。
models.py
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,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
类帐户(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
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),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,pk=None):
employee = Account.objects.get(id=pk).delete()
print('>>>>>>>>>>',employee)
#employee.delete()
return Response({"success":'done',"message":"delete called"})
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)
类logoutViewSet(viewsets.ViewSet): def列表(自身,请求,格式=无):
accesstoken=Accesstoken.objects.get(token=request.Meta.get('HTTP_AUTHORIZATION'))
return Response('response',status=status.HTTP_200_OK)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。