设置 django 密码重置令牌的过期时间

问题描述 投票:0回答:3

我正在使用 Django 内置的密码重置功能,该功能通过电子邮件向用户发送密码重置链接。 Django 中是否有一个选项可以为链接设置过期时间,假设 6 小时后链接将失效,用户将不得不再次请求密码恢复。

python django django-users
3个回答
37
投票

如果您使用 Django 的内置密码重置功能,则可以使用设置

PASSWORD_RESET_TIMEOUT_DAYS

示例:如果用户使用 2 天前生成的密码重置链接,并且您的项目设置中有

PASSWORD_RESET_TIMEOUT_DAYS=1
,则该链接将无效,用户无法继续。

更多信息在这里:https://docs.djangoproject.com/en/3.2/ref/settings/#password-reset-timeout-days


19
投票

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


0
投票

功能

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)

设置.py

PASSWORD_RESET_TIMEOUT = convert_to_seconds(minutes=30)
© www.soinside.com 2019 - 2024. All rights reserved.