Files
François Voron c4de66b81c Revamp authentication (#831)
* Implement Transport classes

* Implement authentication strategy classes

* Revamp authentication with Transport and Strategy

* Revamp strategy and OAuth so that they can use a callable dependency

* Update docstring

* Make ErrorCode a proper Enum and cleanup unused OpenAPI utils

* Remove useless check

* Tweak typing in authenticator

* Update docs

* Improve logout/destroy token logic

* Update docs

* Update docs

* Update docs and full examples

* Apply formatting to examples

* Update OAuth doc and examples

* Add migration doc

* Implement Redis session token

* Add Redis Session documentation

* RedisSession -> Redis

* Fix links in docs
2021-12-30 15:22:07 +01:00

28 lines
1.2 KiB
Markdown

# Redis
[Redis](https://redis.io/) is an ultra-fast key-store database. As such, it's a good candidate for token management. In this strategy, a token is generated and associated with the user id. in the database. On each request, we try to retrieve this token from Redis to get the corresponding user id.
## Configuration
```py
import aioredis
from fastapi_users.authentication import RedisStrategy
redis = aioredis.from_url("redis://localhost:6379", decode_responses=True)
def get_redis_strategy() -> RedisStrategy:
return RedisStrategy(redis, lifetime_seconds=3600)
```
As you can see, instantiation is quite simple. It accepts the following arguments:
* `redis` (`aioredis.Redis`): An instance of `aioredis.Redis`. Note that the `decode_responses` flag set to `True` is necessary.
* `lifetime_seconds` (`Optional[int]`): The lifetime of the token in seconds. Defaults to `None`, which means the token doesn't expire.
!!! tip "Why it's inside a function?"
To allow strategies to be instantiated dynamically with other dependencies, they have to be provided as a callable to the authentication backend.
## Logout
On logout, this strategy will delete the token from the Redis store.