Dash Cognito Auth is a simple library using Cognito OAuth to authenticate and view a Dash app.
This Library uses Flask Dance and a modified version of Plotly's own dash auth for authentication.
This Library is heavily inspired by dash-google-oauth created by Lucas Chapin
$ pip install dash-cognito-auth
Authentication can be added to your Dash application using the CognitoOAuth
class, i.e.
from dash import Dash
from flask import Flask
from dash_cognito_auth import CognitoOAuth
server = Flask(__name__)
server.config.update({
'COGNITO_OAUTH_CLIENT_ID': ...,
'COGNITO_OAUTH_CLIENT_SECRET': ...,
})
app = Dash(__name__, server=server, url_base_pathname="/")
additional_scopes = [...]
auth = CognitoOAuth(
app,
domain='mydomain',
region='eu-west-1',
additional_scopes,
logout_url="/logout"
)
# your Dash app here :)
...
This repository contains a simple Example App that demonstrates how to add Cognito authentication to your Dash app as well as the Login and Logout Flows.
- Check out the repository
- Run
pip install -r requirements.txt
to install the package - Run
pip install -r requirements-dev.txt
to install additional dependencies for running the tests - If you want to run the Sample App or the end to end tests, it makes sense to deploy the Cloudformation Template in order to get a functioning User Pool + App Client
- Run the tests locally
- Use
python -m pytest tests --ignore-glob "*end_to_end*"
to exclude the integration / end to end tests that require a Cognito Setup - Use
python -m pytest tests
to run all tests
- Use
There are integration tests against a Cognito User Pool + App Client, if you want to run those - either create a .env
file with this content or set the environment variables with the same name.
# Credentials for the user in the user pool
COGNITO_USER_NAME=<username>
COGNITO_EMAIL=<email-that-must-match>
COGNITO_PASSWORD=<password>
# Connection between the app and the user pool
COGNITO_DOMAIN=<just-the-prefix>
COGNITO_REGION=<aws-region-of-the-cognito-userpool>
COGNITO_OAUTH_CLIENT_ID=<app-client-id>
COGNITO_OAUTH_CLIENT_SECRET=<app-client-secret>