Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/options.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ General Options:
in a sequence or a set to check more then one location, such as:
``('headers', 'cookies')``. Defaults to ``['headers']``
``JWT_ACCESS_TOKEN_EXPIRES`` How long an access token should live before it expires. This
takes a ``datetime.timedelta``, and defaults to 15 minutes.
takes a ``datetime.timedelta`` or an ``int`` (seconds), and defaults to 15 minutes.
Can be set to ``False`` to disable expiration.
``JWT_REFRESH_TOKEN_EXPIRES`` How long a refresh token should live before it expires. This
takes a ``datetime.timedelta``, and defaults to 30 days.
takes a ``datetime.timedelta`` or ``int`` (seconds), and defaults to 30 days.
Can be set to ``False`` to disable expiration.
``JWT_ALGORITHM`` Which algorithm to sign the JWT with. `See here <https://pyjwt.readthedocs.io/en/latest/algorithms.html>`_
for the options. Defaults to ``'HS256'``.
Expand Down
10 changes: 8 additions & 2 deletions flask_jwt_extended/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,16 +186,22 @@ def refresh_csrf_header_name(self):
@property
def access_expires(self):
delta = current_app.config['JWT_ACCESS_TOKEN_EXPIRES']
if type(delta) is int:
delta = datetime.timedelta(seconds=delta)
if not isinstance(delta, datetime.timedelta) and delta is not False:
err = 'JWT_ACCESS_TOKEN_EXPIRES must be a datetime.timedelta or False'
err = 'JWT_ACCESS_TOKEN_EXPIRES must be a ' \
'datetime.timedelta, int or False'
raise RuntimeError(err)
return delta

@property
def refresh_expires(self):
delta = current_app.config['JWT_REFRESH_TOKEN_EXPIRES']
if type(delta) is int:
delta = datetime.timedelta(seconds=delta)
if not isinstance(delta, datetime.timedelta) and delta is not False:
err = 'JWT_REFRESH_TOKEN_EXPIRES must be a datetime.timedelta or False'
err = 'JWT_REFRESH_TOKEN_EXPIRES must be a ' \
'datetime.timedelta, int or False'
raise RuntimeError(err)
return delta

Expand Down
9 changes: 9 additions & 0 deletions tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,15 @@ def test_tokens_never_expire(app):
assert config.refresh_expires is False


def test_tokens_with_int_values(app):
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = 300
app.config['JWT_REFRESH_TOKEN_EXPIRES'] = 432000

with app.test_request_context():
assert config.access_expires == timedelta(minutes=5)
assert config.refresh_expires == timedelta(days=5)


# noinspection PyStatementEffect
def test_symmetric_secret_key(app):
with app.test_request_context():
Expand Down