token_for_signin.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import base64
  2. import secrets
  3. import jwt
  4. from datetime import datetime, timedelta
  5. def generate_jwt_token(
  6. email: str,
  7. name: str,
  8. secret_key: str = "QCopWfW1tmdxRulrO3axMBx78ygNkOI-fOv7J-4iJaU", # 建议通过环境变量注入实际密钥
  9. expires: int = 3600 # 默认有效期 1 小时(秒)
  10. ) -> str:
  11. """
  12. 生成包含用户信息的 JWT Token
  13. :param email: 用户邮箱(必需)
  14. :param name: 用户名(必需)
  15. :param secret_key: 加密密钥(默认示例值)
  16. :param expires: Token 有效期(秒)
  17. :return: JWT Token 字符串
  18. """
  19. payload = {
  20. "email": email,
  21. "name": name,
  22. # 可添加其他字段
  23. "exp": datetime.utcnow() + timedelta(seconds=expires)
  24. }
  25. return jwt.encode(
  26. payload,
  27. secret_key,
  28. algorithm="HS256"
  29. )
  30. # 示例用法
  31. if __name__ == "__main__":
  32. # 生成有效 Token
  33. valid_token = generate_jwt_token(
  34. email="ygtx@ygtx.cn",
  35. name="ygtx",
  36. expires=3600
  37. )
  38. print("Valid Token:", valid_token)
  39. # 生成已过期 Token(用于测试过期场景)
  40. expired_token = generate_jwt_token(
  41. email="liuq@yg.com",
  42. name="liuq",
  43. expires=3600 # 负值强制过期
  44. )
  45. print("Expired Token:", expired_token)
  46. # 生成32字节(256位)随机数据
  47. key_bytes = secrets.token_bytes(32)
  48. # 转换为Base64字符串(无填充,URL安全)
  49. key_base64 = base64.urlsafe_b64encode(key_bytes).decode().strip("=")
  50. print("密钥:", key_base64)