Fix bug: if you create token in django admin, token field is empty
This commit is contained in:
parent
5017e004c2
commit
bf4af285e8
@ -2,4 +2,7 @@ from django.contrib import admin
|
|||||||
from .models import *
|
from .models import *
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(UserToken)
|
@admin.register(UserToken)
|
||||||
|
class DevEventAdmin(admin.ModelAdmin):
|
||||||
|
readonly_fields = ['access_token']
|
||||||
|
fields = ['user', 'creation_time', 'access_token']
|
||||||
|
@ -19,6 +19,11 @@ def account_auth(params):
|
|||||||
return api_make_response({"access_token": token.access_token})
|
return api_make_response({"access_token": token.access_token})
|
||||||
|
|
||||||
|
|
||||||
|
def account_deauth(params):
|
||||||
|
UserToken.deauth(api_get_param_str(params, "access_token"))
|
||||||
|
return api_make_response({})
|
||||||
|
|
||||||
|
|
||||||
def account_register(params):
|
def account_register(params):
|
||||||
name = api_get_param_str(params, "name")
|
name = api_get_param_str(params, "name")
|
||||||
surname = api_get_param_str(params, "surname")
|
surname = api_get_param_str(params, "surname")
|
||||||
@ -132,6 +137,15 @@ api_methods = {
|
|||||||
"returns": "В случае правильных логина и пароля <code>access_token</code>. В противном случае объект ошибки."
|
"returns": "В случае правильных логина и пароля <code>access_token</code>. В противном случае объект ошибки."
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"account.deauth": {
|
||||||
|
"func": account_deauth,
|
||||||
|
"doc": "Удаление токена, дальшейшие вызовы API с этим токеном вернут ошибку невалидного токена",
|
||||||
|
"params": [
|
||||||
|
__make_argument_access_token()
|
||||||
|
],
|
||||||
|
"returns": "В случае успеха стандартный код успеха"
|
||||||
|
},
|
||||||
|
|
||||||
"account.register": {
|
"account.register": {
|
||||||
"func": account_register,
|
"func": account_register,
|
||||||
"doc": "Регистрация нового пользователя",
|
"doc": "Регистрация нового пользователя",
|
||||||
|
@ -16,15 +16,7 @@ class UserToken(models.Model):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_token(user: SiteUser):
|
def create_token(user: SiteUser):
|
||||||
source = bytearray(user.email + user.password + str(datetime.now()), 'utf-8')
|
token = UserToken(user=user)
|
||||||
h = sha512(source).hexdigest()
|
|
||||||
|
|
||||||
# чекаем токен в базе
|
|
||||||
if UserToken.objects.filter(access_token=h).count() != 0:
|
|
||||||
# по какой-то причине есть, выкидываем исключение
|
|
||||||
raise Exception(API_ERROR_TOKEN_CREATION)
|
|
||||||
|
|
||||||
token = UserToken(access_token=h, user=user)
|
|
||||||
token.save()
|
token.save()
|
||||||
|
|
||||||
print(f"created token {token.access_token[:16]}...")
|
print(f"created token {token.access_token[:16]}...")
|
||||||
@ -43,6 +35,15 @@ class UserToken(models.Model):
|
|||||||
|
|
||||||
return user[0]
|
return user[0]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def deauth(token: str):
|
||||||
|
t = UserToken.objects.filter(access_token=token)
|
||||||
|
|
||||||
|
if len(t) == 0:
|
||||||
|
raise Exception(API_ERROR_INVALID_TOKEN)
|
||||||
|
|
||||||
|
t[0].delete()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_user_by_token(token: str):
|
def get_user_by_token(token: str):
|
||||||
t = UserToken.objects.filter(access_token=token)
|
t = UserToken.objects.filter(access_token=token)
|
||||||
@ -53,3 +54,17 @@ class UserToken(models.Model):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.user.email + ": " + self.access_token[:10] + "..."
|
return self.user.email + ": " + self.access_token[:10] + "..."
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
if len(self.access_token) == 0:
|
||||||
|
source = bytearray(self.user.email + self.user.password + str(datetime.now()), 'utf-8')
|
||||||
|
t = sha512(source).hexdigest()
|
||||||
|
|
||||||
|
# чекаем токен в базе
|
||||||
|
if UserToken.objects.filter(access_token=t).count() != 0:
|
||||||
|
# по какой-то причине есть, выкидываем исключение
|
||||||
|
raise Exception(API_ERROR_TOKEN_CREATION)
|
||||||
|
|
||||||
|
self.access_token = t
|
||||||
|
|
||||||
|
super().save(*args, **kwargs)
|
||||||
|
Reference in New Issue
Block a user