Update/fix login
This commit is contained in:
parent
ba1f59cfb9
commit
15fe7fab08
4 changed files with 56 additions and 8 deletions
|
@ -1,4 +1,6 @@
|
|||
from sqlmodel import Field, SQLModel, Relationship
|
||||
from datetime import datetime
|
||||
|
||||
from sqlmodel import Field, SQLModel, Relationship, String
|
||||
from pydantic import BaseModel
|
||||
|
||||
from gisaf.models.metadata import gisaf_admin
|
||||
|
@ -27,10 +29,20 @@ class UserBase(SQLModel):
|
|||
|
||||
class User(UserBase, table=True):
|
||||
__table_args__ = gisaf_admin.table_args
|
||||
id: str | None = Field(default=None, primary_key=True)
|
||||
|
||||
id: int = Field(primary_key=True)
|
||||
username: str = Field(String(255), unique=True, index=True)
|
||||
email: str = Field(sa_type=String(50), unique=True)
|
||||
password: str = Field(sa_type=String(255))
|
||||
active: bool
|
||||
confirmed_at: datetime
|
||||
last_login_at: datetime
|
||||
current_login_at: datetime
|
||||
last_login_ip: str = Field(sa_type=String(255))
|
||||
current_login_ip: str = Field(sa_type=String(255))
|
||||
login_count: int
|
||||
roles: list["Role"] = Relationship(back_populates="users",
|
||||
link_model=UserRoleLink)
|
||||
password: str | None = None
|
||||
|
||||
def can_view(self, model) -> bool:
|
||||
role = getattr(model, 'viewable_role', None)
|
||||
|
|
|
@ -10,7 +10,7 @@ from pydantic import BaseModel
|
|||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
from jose import JWTError, jwt, ExpiredSignatureError
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlmodel import select
|
||||
from sqlalchemy.orm import selectinload
|
||||
|
||||
from gisaf.config import conf
|
||||
|
@ -72,7 +72,8 @@ async def enable_user(session: AsyncSession, username: str, enable=True):
|
|||
await session.commit()
|
||||
|
||||
|
||||
async def create_user(session: AsyncSession, username: str, password: str, full_name: str,
|
||||
async def create_user(session: AsyncSession, username: str,
|
||||
password: str, full_name: str,
|
||||
email: str, **kwargs):
|
||||
user_in_db: User | None = await get_user(session, username)
|
||||
if user_in_db is None:
|
||||
|
@ -93,10 +94,10 @@ async def create_user(session: AsyncSession, username: str, password: str, full_
|
|||
|
||||
async def get_user(
|
||||
session: AsyncSession,
|
||||
username: str) -> (User | None):
|
||||
username: str) -> User | None:
|
||||
query = select(User).where(User.username==username).options(selectinload(User.roles))
|
||||
data = await session.exec(query)
|
||||
return data.scalar()
|
||||
return data.one_or_none()
|
||||
|
||||
|
||||
def verify_password(user: User, plain_password):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue