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 *
|
||||
|
||||
|
||||
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})
|
||||
|
||||
|
||||
def account_deauth(params):
|
||||
UserToken.deauth(api_get_param_str(params, "access_token"))
|
||||
return api_make_response({})
|
||||
|
||||
|
||||
def account_register(params):
|
||||
name = api_get_param_str(params, "name")
|
||||
surname = api_get_param_str(params, "surname")
|
||||
@ -132,6 +137,15 @@ api_methods = {
|
||||
"returns": "В случае правильных логина и пароля <code>access_token</code>. В противном случае объект ошибки."
|
||||
},
|
||||
|
||||
"account.deauth": {
|
||||
"func": account_deauth,
|
||||
"doc": "Удаление токена, дальшейшие вызовы API с этим токеном вернут ошибку невалидного токена",
|
||||
"params": [
|
||||
__make_argument_access_token()
|
||||
],
|
||||
"returns": "В случае успеха стандартный код успеха"
|
||||
},
|
||||
|
||||
"account.register": {
|
||||
"func": account_register,
|
||||
"doc": "Регистрация нового пользователя",
|
||||
|
@ -16,15 +16,7 @@ class UserToken(models.Model):
|
||||
|
||||
@staticmethod
|
||||
def create_token(user: SiteUser):
|
||||
source = bytearray(user.email + user.password + str(datetime.now()), 'utf-8')
|
||||
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 = UserToken(user=user)
|
||||
token.save()
|
||||
|
||||
print(f"created token {token.access_token[:16]}...")
|
||||
@ -43,6 +35,15 @@ class UserToken(models.Model):
|
||||
|
||||
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
|
||||
def get_user_by_token(token: str):
|
||||
t = UserToken.objects.filter(access_token=token)
|
||||
@ -53,3 +54,17 @@ class UserToken(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
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