from IPython.display import Markdown
OAuth
This is not yet thoroughly tested. See the docs page for an explanation of how to use this.
GoogleAppClient
GoogleAppClient (client_id, client_secret, code=None, scope=None, **kwargs)
A WebApplicationClient
for Google oauth2
GitHubAppClient
GitHubAppClient (client_id, client_secret, code=None, scope=None, **kwargs)
A WebApplicationClient
for GitHub oauth2
HuggingFaceClient
HuggingFaceClient (client_id, client_secret, code=None, scope=None, state=None, **kwargs)
A WebApplicationClient
for HuggingFace oauth2
DiscordAppClient
DiscordAppClient (client_id, client_secret, is_user=False, perms=0, scope=None, **kwargs)
A WebApplicationClient
for Discord oauth2
= GoogleAppClient.from_file('/Users/jhoward/git/_nbs/oauth-test/client_secret.json') cli
WebApplicationClient.login_link
WebApplicationClient.login_link (redirect_uri, scope=None, state=None)
Get a login link for this client
Generating a login link that sends the user to the OAuth provider is done with client.login_link()
.
It can sometimes be useful to pass state to the OAuth provider, so that when the user returns you can pick up where they left off. This can be done by passing the state
parameter.
from fasthtml.common import *
from fasthtml.jupyter import *
= '/redirect'
redir_path = 8000
port = None code_stor
= fast_app()
app,rt = JupyUvi(app, port=port) server
redir_url
redir_url (request, redir_path, scheme='https')
Get the redir url for the host in request
@rt
def index(request):
= redir_url(request, redir_path)
redir return A('login', href=cli.login_link(redir), target='_blank')
_AppClient.parse_response
_AppClient.parse_response (code, redirect_uri)
Get the token from the oauth2 server response
_AppClient.get_info
_AppClient.get_info (token=None)
Get the info for authenticated user
_AppClient.retr_info
_AppClient.retr_info (code, redirect_uri)
Combines parse_response
and get_info
@rt(redir_path)
def get(request, code:str):
= redir_url(request, redir_path)
redir = cli.retr_info(code, redir)
info return P(f'Login successful for {info["name"]}!')
# HTMX()
server.stop()
_AppClient.retr_id
_AppClient.retr_id (code, redirect_uri)
Call retr_info
and then return id/subscriber value
After logging in via the provider, the user will be redirected back to the supplied redirect URL. The request to this URL will contain a code
parameter, which is used to get an access token and fetch the user’s profile information. See the explanation here for a worked example. You can either:
- Use client.retr_info(code) to get all the profile information, or
- Use client.retr_id(code) to get just the user’s ID.
After either of these calls, you can also access the access token (used to revoke access, for example) with client.token["access_token"]
.
url_match
url_match (url, patterns=('^(localhost|127\\.0\\.0\\.1)(:\\d+)?$',))
OAuth
OAuth (app, cli, skip=None, redir_path='/redirect', error_path='/error', logout_path='/logout', login_path='/login', https=True, http_patterns=('^(localhost|127\\.0\\.0\\.1)(:\\d+)?$',))
Initialize self. See help(type(self)) for accurate signature.