| 12345678910111213141516171819202122232425262728293031 |
- 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"<Token {self.token_type} for user {self.user_id}>"
|