from IPython.display import Markdown授权
处理OAuth的基本框架
查看文档页面以了解如何使用这个。
谷歌应用客户端
GoogleAppClient (client_id, client_secret, code=None, scope=None, **kwargs)
一个 WebApplicationClient 用于 Google oauth2
GitHub应用客户端
GitHubAppClient (client_id, client_secret, code=None, scope=None, **kwargs)
一个 WebApplicationClient 用于 GitHub oauth2
HuggingFaceClient
HuggingFaceClient (client_id, client_secret, code=None, scope=None, state=None, **kwargs)
一个WebApplicationClient用于HuggingFace oauth2
Discord应用客户端
DiscordAppClient (client_id, client_secret, is_user=False, perms=0, scope=None, **kwargs)
一个 WebApplicationClient 用于 Discord oauth2
Auth0应用客户端
Auth0AppClient (domain, client_id, client_secret, code=None, scope=None, redirect_uri='', **kwargs)
一个 WebApplicationClient 用于 Auth0 OAuth2
# cli = GoogleAppClient.from_file('/Users/jhoward/subs_aai/_nbs/oauth-test/client_secret.json')WebApplicationClient.login_link
WebApplicationClient.login_link (redirect_uri, scope=None, state=None)
获取此客户的登录链接
生成一个登录链接,将用户发送到 OAuth 提供者是通过 client.login_link() 完成的。
有时将状态传递给OAuth提供者是有用的,以便当用户返回时,您可以从他们离开的位置继续。这可以通过传递state参数来完成。
from fasthtml.common import *
from fasthtml.jupyter import *redir_path = '/redirect'
port = 8000
code_stor = Noneapp,rt = fast_app()
server = JupyUvi(app, port=port)重定向网址
redir_url (request, redir_path, scheme=None)
获取request中主机的重定向URL
@rt
def index(request):
redir = redir_url(request, redir_path)
return A('login', href=cli.login_link(redir), target='_blank')_AppClient.解析响应
_AppClient.parse_response (code, redirect_uri)
从 oauth2 服务器响应中获取令牌
_AppClient.get_info
_AppClient.get_info (token=None)
获取认证用户的信息
_AppClient.获取信息
_AppClient.retr_info (code, redirect_uri)
组合 parse_response 和 get_info
@rt(redir_path)
def get(request, code:str):
redir = redir_url(request, redir_path)
info = cli.retr_info(code, redir)
return P(f'Login successful for {info["name"]}!')# HTMX()server.stop()_AppClient.retr_id
_AppClient.retr_id (code, redirect_uri)
调用 retr_info 然后返回 id/subscriber 值
通过提供者登录后,用户将被重定向回提供的重定向URL。对此URL的请求将包含一个 code 参数,该参数用于获取访问令牌并获取用户的个人资料信息。请参阅 这里的解释 以获取示例。您可以选择:
- 使用 client.retr_info(code) 来获取所有的个人资料信息,或者
- 使用 client.retr_id(code) 获取用户的 ID。
在这些调用之后,您还可以使用 client.token["access_token"] 访问访问令牌(例如,用于撤销访问)。
网址匹配
url_match (url, patterns=('^(localhost|127\\.0\\.0\\.1)(:\\d+)?$',))
授权
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+)?$',))
初始化 self。请查看 help(type(self)) 以获取准确的签名。