我正在使用 Django 内置的密码重置功能,该功能通过电子邮件向用户发送密码重置链接。 Django 中是否有一个选项可以为链接设置过期时间,假设 6 小时后链接将失效,用户将不得不再次请求密码恢复。
如果您使用 Django 的内置密码重置功能,则可以使用设置
PASSWORD_RESET_TIMEOUT_DAYS
。
示例:如果用户使用 2 天前生成的密码重置链接,并且您的项目设置中有
PASSWORD_RESET_TIMEOUT_DAYS=1
,则该链接将无效,用户无法继续。
更多信息在这里:https://docs.djangoproject.com/en/3.2/ref/settings/#password-reset-timeout-days
Django 包含在 Django 3.1 或更高版本中使令牌在 1 天之内过期的功能。使用设置
PASSWORD_RESET_TIMEOUT
,该设置需要经过几秒后令牌才会过期。
PASSWORD_RESET_TIMEOUT = 259200 # 3 days, in seconds
文档:https://docs.djangoproject.com/en/stable/ref/settings/#password-reset-timeout
def convert_to_seconds(days: int = 0, hours: int = 0, minutes: int = 0, seconds: int = 0):
"""
# Convert time information to seconds.
- Args:
- `days` (`int`): Number of days. `Default: 0`.
- `hours` (`int`): Number of hours. `Default: 0`.
- `minutes` (`int`): Number of minutes. `Default: 0`.
- `seconds` (`int`): Number of seconds. `Default: 0`.
- Returns:
- int: Total seconds for the specified time.
Example:
```
>>> convert_to_seconds(days=2, hours=12, minutes=30, seconds=15)
210015
>>> convert_to_seconds(hours=1, minutes=30)
5400
>>> convert_to_seconds(minutes=30)
1800
>>> convert_to_seconds(minutes=30, seconds=10)
1810
>>> convert_to_seconds(minutes=30, seconds=155550)
157350
>>> convert_to_seconds(days=365)
31536000
>>>
```
"""
total_seconds = days * 24 * 60 * 60 # Convert days to seconds
total_seconds += hours * 60 * 60 # Convert hours to seconds
total_seconds += minutes * 60 # Convert minutes to seconds
total_seconds += seconds # Seconds to seconds
return int(total_seconds)
PASSWORD_RESET_TIMEOUT = convert_to_seconds(minutes=30)