添加社交登录提供商

本指南介绍如何通过拉取请求(Pull Request)为 Frappe 添加社交登录提供商。

在 SocialLoginKey.get_social_login_provider 中添加你的提供商

providers["Frappe"] = {
 "provider_name": "Frappe",
 "enable_social_login": 1,
 "custom_base_url": 1,
 "icon":"/assets/frappe/images/favicon.png",
 "redirect_url": "/api/method/frappe.www.login.login_via_frappe",
 "api_endpoint": "/api/method/frappe.integrations.oauth2.openid_profile",
 "api_endpoint_args":None,
 "authorize_url": "/api/method/frappe.integrations.oauth2.authorize",
 "access_token_url": "/api/method/frappe.integrations.oauth2.get_token",
 "auth_url_data": json.dumps({
 "response_type": "code",
 "scope": "openid"
 })
}

在 Social Login Key DocType 的 social_login_provider 选择字段选项中,以完全相同的大小写形式添加提供商密钥。例如:Frappe

当用户添加社交登录提供商并启用后,提供商 API 服务器会将 Authorization Code 发送回同一服务器上指定的 redirect_url。你需要在 frappe.integrations.oauth2_logins 中添加一个允许访客访问的白名单方法。例如:login_via_office365

OAuth 2.0 + OpenID Connect 有多种实现方式。这里我们将讨论两种获取 OpenID 信息的方法。

通过 OpenID Profile 端点创建用户

示例:

@frappe.whitelist(allow_guest=True)
def login_via_frappe(code, state):
 login_via_oauth2("frappe", code, state, decoder=json.loads)

通过 id_token 创建用户

示例:

@frappe.whitelist(allow_guest=True)
def login_via_office365(code, state):
 login_via_oauth2_id_token("office_365", code, state, decoder=json.loads)