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

33 lines
1.1 KiB
Markdown

# Create a backend
As we said, a backend is the combination of a transport and a strategy. That way, you can create a complete strategy exactly fitting your needs.
For this, you have to use the `AuthenticationBackend` class.
```py
from fastapi_users.authentication import AuthenticationBackend, BearerTransport, JWTStrategy
SECRET = "SECRET"
bearer_transport = BearerTransport(tokenUrl="auth/jwt/login")
def get_jwt_strategy() -> JWTStrategy:
return JWTStrategy(secret=SECRET, lifetime_seconds=3600)
auth_backend = AuthenticationBackend(
name="jwt",
transport=bearer_transport,
get_strategy=get_jwt_strategy,
)
```
As you can see, instantiation is quite simple. It accepts the following arguments:
* `name` (`str`): Name of the backend. Each backend should have a unique name.
* `transport` (`Transport`): An instance of a `Transport` class.
* `get_strategy` (`Callable[..., Strategy]`): A dependency callable returning an instance of a `Strategy` class.
## Next steps
You can have as many authentication backends as you wish. You'll then have to pass those backends to your `FastAPIUsers` instance and generate an auth router for each one of them.