极简和独立于框架的oauth(1&2)消费者
uniauth的Python项目详细描述
注意
有关最新消息来源、讨论等,请访问 GitHub repository
单位
提供通用OAuth(1&2)消费者(或轻松添加更多内容的能力)的极简和独立于框架的包。
安装
pip install uniauth
使用量
检索令牌:
from uniauth import Bitbucket, GitHub # Use an OAuth2 client client = GitHub(client_id="****************", client_secret="****************", scope=None) # Or an OAuth1 client client = Bitbucket(client_id="****************", client_secret="****************") # Provides a unified flow for both OAuth1 & OAuth2 oauth_dance = client.dance(stash, "http://example.org/oauth/callback") # 'stash' allows to complete the oauth dance over multiple requests (by maintaining OAuth1's request token or OAuth2's state) # It can be anything as long as it implements __setattr__(key, value) and pop(key, default) # e.g.: # stash = request.session # Or # stash = {} # Redirect your user to: oauth_dance.get_authorization_url() # Get the access token using the absolute url the povider redirected your user to: normalised_token = oauth_dance.get_access_token(callback_url) # {"token": "**********", "extra": "**********", "expires_at": None, "scope": None} # The token is also stored in the client state client.get_profile()
还原令牌:
# OAuth2 client client = GitHub(client_id="****************", client_secret="****************", scope=None, token=normalised_token) # or OAuth1 client client = Bitbucket(client_id="****************", client_secret="****************", token=normalised_token) client.get_profile()
请求任何资源:
# client.request has a similar signature to requests.request but with an optional method (it uses "GET" by default) response = client.request(url_to_resource) # response is an instance of requests.Response response.raise_for_status() data = response.json()
就这样。
可用消费者
位桶
使用uniauth.Bitbucket
使用uniauth.Facebook
Github
使用uniauth.GitHub
谷歌
使用uniauth.Google
使用uniauth.LinkedIn
贡献更多
很容易添加更多消费者:
from uniauth.base import ProfileMixin from uniauth.oauth2 import OAuth2Consumer class MyProviderName(ProfileMixin, OAuth2Consumer): authorization_url = "https://example.org/oauth2/authorization" access_token_url = "https://example.org/oauth2/access_token" profile_url = "https://example.org/user/" def normalize_profile_data(self, data): # transform provider's format into normalised format return {"uid": data.get("id"), "email": data.get("email_address"), "username": data.get("login"), "first_name": data.get("given_name"), "last_name": data.get("family_name"), "gender": data.get("sex"), "birthdate": data.get("dob"), "avatar_url": data.get("picture"), "is_verified": data.get("verified")}
贡献
欢迎大家发表意见。
更改日志
v0.0.2
- 将默认提供程序名称强制转换为Unicode
- 修复未使用的资源请求附加参数
v0.0.1
- 首字母