Module sanic_discord.oauth

sanic-discord.oauth

About

This is for discord oauth2.

Example

from sanic import Sanic, response
from sanic_discord import Oauth2

from os import getenv


app = Sanic("hello")
oauth2 = Oauth2(
    app, client_id=getenv("CLIENT_ID"), client_secret=getenv("CLIENT_SECRET"),
    redirect_uri="http://127.0.0.1:8000/callback"
)


@app.get("/callback")
@oauth2.exchange_code()
async def redirect(_, access_token):
    r = response.redirect("/me")
    r.cookies["access_token"] = access_token.access_token
    r.cookies["access_token"]["expires"] = access_token.expires_in
    return r

@app.get("/login")
async def login(_):
    return response.redirect(oauth2.get_authorize_url(["identify", "email"]))

@app.get("/me")
async def me(request):
    if "access_token" in request.cookies:
        data = await oauth2.fetch_user(request.cookies["access_token"])
        return response.text(f"hello {data['username']}")
    return response.redirect("/login")

@app.get("/")
async def index(_):
    return response.text("hello world")

@app.before_server_stop
async def close_client(app, loop):
    print("Closing oauth client...")
    await oauth2.close()

app.run("0.0.0.0")
Expand source code
"""
.. include:: ./README.md
"""
from .oauth import Oauth2
from .errors import OauthException, HttpException, NotFoundException, StateError
from .access_token import AccessToken, AccessTokenType
from .blueprints import exchange_code

Sub-modules

sanic_discord.oauth.access_token
sanic_discord.oauth.blueprints
sanic_discord.oauth.errors
sanic_discord.oauth.http
sanic_discord.oauth.oauth

Oauth2 client for sanic.