from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.sql import func from datetime import datetime from ..database import Base class Token(Base): __tablename__ = "tokens" id = Column(Integer, primary_key=True, index=True) # Token信息 token = Column(String(500), nullable=False, index=True) token_type = Column(String(50), nullable=False) # access, refresh, verify, reset expires_at = Column(DateTime, nullable=False) is_revoked = Column(Boolean, default=False) # 用户关联 user_id = Column(Integer, ForeignKey("users.id"), nullable=False) user = relationship("User", back_populates="tokens") # 额外信息 ip_address = Column(String(45), nullable=True) user_agent = Column(String(500), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) def is_expired(self): return datetime.utcnow() > self.expires_at def __repr__(self): return f""