/
wezzydev
/
razor
Обзор
Документация
Войти
/
wezzydev
/
razor
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
auth/models.py
47 строк
2 KB
Ivan Graft
dev
06 авг 2026, 22:03
Верифицирован
06 авг 2026, 22:03
6a15ac7
Код
Авторство
О чём код?
import bcrypt from tortoise.models import Model from tortoise import fields # ---------- Модели ---------- class User(Model): id = fields.IntField(primary_key=True) username = fields.CharField(max_length=50, unique=True, null=True) # может быть пустым при OAuth email = fields.CharField(max_length=100, unique=True) password_hash = fields.CharField(max_length=255, null=True) # для парольной аутентификации oauth_provider = fields.CharField(max_length=20, null=True) # 'yandex', 'vk' oauth_id = fields.CharField(max_length=100, null=True) # ID в соцсети is_active = fields.BooleanField(default=True) created_at = fields.DatetimeField(auto_now_add=True) class Meta: table = "users" @staticmethod async def create_user(username: str, email: str, password: str) -> "User": password_hash = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode() return await User.create(username=username, email=email, password_hash=password_hash) @staticmethod async def create_oauth_user(email: str, provider: str, oauth_id: str) -> "User": return await User.create( email=email, oauth_provider=provider, oauth_id=oauth_id, username=f"{provider}_{oauth_id}" ) async def verify_password(self, password: str) -> bool: if not self.password_hash: return False return bcrypt.checkpw(password.encode(), self.password_hash.encode()) class Session(Model): id = fields.IntField(primary_key=True) user = fields.ForeignKeyField("models.User", related_name="sessions") refresh_token = fields.CharField(max_length=255, unique=True) is_active = fields.BooleanField(default=True) created_at = fields.DatetimeField(auto_now_add=True) class Meta: table = "sessions"