# SDK for Python

Authing Python SDK 目前只支持 Python3+。

GitHub 地址:https://github.com/Authing/authing-py-sdk (opens new window)

# 1. 安装 Authing SDK

安装需求

  • Python 3+
  • pip3

当构建大规模应用时,我们推荐使用 pip 进行安装, 它可以与一些模块打包工具很好地配合使用。 注意,Authing 目前仅能从 pip3 以上安装。

# latest stable
$ pip install authing

# 2. 初始化 Authing SDK

# 2.1 获取配置信息

你需要先获取 UserPoolId 和 Secret,查看如何获取 UserPoolId & Secret (opens new window)

# 2.2 使用 Authing UserPoolId & Secret 初始化

from authing import Authing
authing = Authing({
    "userPoolId": userPoolId,
    "secret": secret,
})

# 2.3 使用 Token 初始化

from authing import Authing
authing = Authing({
    "userPoolId": userPoolId,
    "token": token,
})

# 2.4 使用账号密码初始化 SDK

from authing import Authing
authing = Authing({"userPoolId": userPoolId })
authing.login({
    "username": TEST_USERNAME,
    "password": TEST_PASSWORD,
})

# 3. API 接口

Authing-sdk 实现了 Graphql 的封装,所以函数名和参数与 Graphql 语句相对应。支持的 Graphql 语句. 以通过域名查询对应的 OIDC 应用信息为例:

在 SDK 中内置的 Graphql 语句是

query QueryOIDCAppInfoByDomain($domain: String) {
  QueryOIDCAppInfoByDomain(domain: $domain) {
    _id
    name
    domain
    image
    redirect_uris
    client_id
    client_secret
    token_endpoint_auth_method
    id_token_signed_response_alg
    id_token_encrypted_response_alg
    id_token_encrypted_response_enc
    userinfo_signed_response_alg
    userinfo_encrypted_response_alg
    userinfo_encrypted_response_enc
    request_object_signing_alg
    request_object_encryption_alg
    request_object_encryption_enc
    jwks_uri
    _jwks_uri
    custom_jwks
    jwks
    _jwks
    clientId
    grant_types
    response_types
    description
    homepageURL
    isDeleted
    isDefault
    when
    css
    authorization_code_expire
    id_token_expire
    access_token_expire
    cas_expire
    loginUrl
    customStyles {
      forceLogin
      hideQRCode
      hideUP
      hideUsername
      hideRegister
      hidePhone
      hideSocial
      hideClose
      hidePhonePassword
      defaultLoginMethod
    }
  }
}

所以在 Python SDK 中的调用为

res = auth.QueryOIDCAppInfoByDomain({
  domain:'test'
})

查看更多的 Graphql 接口信息 (opens new window)

# 4. 自定义请求链接

如果你私有部署了 Authing,可以通过以下方式初始化:

from authing.authing import Authing

userPoolId = 'your_client_id'
secret = 'your_app_secret'

authing = Authing({
    "userPoolId": userPoolId,
    "secret": secret,
    "host": 'https://oauth.your_url.com/graphql',
    'pubKey': PUBLIC_KEY
})

# 5. 接口文档

# 登录

# 使用邮箱密码登录

userInfo = authing.login({
    "email": EMAIL,
    "password": PASSWORD,
})

# 使用用户名密码登录

userInfo = authing.login({
    "username": USERNAME,
    "password": PASSWORD,
})

# 使用手机号密码登录

userInfo = authing.login({
    "phone": PHONE,
    "password": PASSWORD,
})

# 使用手机号验证码登录

userInfo = authing.login({
    "phone": PHONE,
    "phoneCode": PHONE_CODE,
})

# 注册

userInfo = authing.register({
    "username": username,
    "password": password
})

# 查询用户数据

userInfo = authing.user({'id': 'USER_ID'})

# 查询用户列表

usersList = authing.users({ 'page': 1, 'count': 10 })

# 检查登录状态

# Token 可通过登录之后返回的 userInfo 中的 token 字段获取
result = authing.checkLoginStatus({
    'token': 'TOKEN'
})

# 更改用户邮箱

# 执行邮箱更换

result = authing.updateEmail({
    'email': 'EMAIL',
    'emailCode': 'CODE'
})

其中参数为

  • email 新邮箱 {String} 必填
  • emailCode 邮箱验证码 {String} 必填
  • oldEmail 原邮箱 {String},选填
  • oldEmailCode 原邮箱验证码 {String},选填

# 修改用户资料

result = authing.updateUser({
    'KEY': 'VALUE'
})

其中可选 Key 如下所示:

  • _id {String} 必填
    • email {String},选填
    • emailVerified: {Boolean},选填,邮箱是否经过验证
    • username: {String},选填
    • nickname: {String},选填
    • company: {String},选填
    • phone: {String},选填
    • oauth: {String},选填,oauth 信息
    • photo: {String || file object},选填,用户头像
    • browser: {String},选填,用户注册时所用的浏览器
    • password: {String},选填,用户密码
    • oldPassword: {String}(当有 password 时,旧密码参数必需填写)
    • token: {String},选填
    • tokenExpiredAt: {String},选填,token 过期时间
    • loginsCount: {Number},选填,登录次数
    • lastLogin: {String},选填,最后登录时间
    • lastIP: {String},选填,最后登录 IP
    • signedUp: {String},选填,注册时间
    • blocked: {Boolean},选填,是否被锁定
    • isDeleted: {Boolean},选填,是否被删除

# 更新 Phone 信息

res = authing.updatePhone({'phone': '13461115929', 'phoneCode': '1234'})

# 解析 Token

res = authing.decodeToken({ 'token': TOKEN })

# 解绑邮箱 UnbindEmail

res = authing.unbindEmail({ 'user': userId })

# 发送手机验证码

res = authing.sendPhoneCode("phone number")
assert res['code'] == 200

# 使用手机号验证码重置密码

res = authing.resetPasswordByPhoneCode("phone number", "code", "new password")
assert res['code'] == 200

# 发送重置密码邮件(邮件内包含 verifyCode)

res = authing.sendResetPasswordEmail({
    'email': email,
})

# 使用邮件验证码重置密码

res = authing.changePassword({
    'email': email,
    'password': newPassword,
    'verifyCode': verifyCode,
})

# 删除用户

result = authing.removeUsers({ 'ids': 'id1,id2,id3' })

更多接口信息, 查看 Authing 的 Graphql 接口文档 (opens new window)