用户授权
1. 权限介绍#
通过用户的授权,我们可以便捷的获取用户信息。
用户授权的大体逻辑为:
- 用户点击授权按钮,开发者获取到用户授权的
code- 开发者将
code发送到自己的服务器- 自己的服务器通过
code获取用户的access_token和scope,服务端详情参见 用户授权- 开发者使用
access_token和scope获取用户的信息,客户端详情参见 使用 Token 访问用户信息
| 权限 | 介绍 |
|---|---|
| PROFILE:READ | 获取用户基本信息,如用户 ID、Mixin ID、姓名、头像等。 |
| PHONE:READ | 获取用户的手机号码。 |
| ASSETS:READ | 获取用户资产列表和余额。 |
| CONTACTS:READ | 获取用户联系人列表、黑名单列表。 |
| MESSAGES:REPRESENT | 允许机器人代表用户发送消息。 |
| SNAPSHOTS:READ | 访问用户的转账记录,包括存款和提现。 |
| COLLECTIBLES:READ | 获取用户的 NFT 资产详情。 |
2. 使用回调页面完成 code 获取#
使用回调页面完成 code 获取的开发思路和流程:
完成授权范围
scope的配置完成回调页面
params的配置调用
Mixin.toAuthPage(params),此时会跳转到授权页面。 整体的代码如下:const scope = { profile: true, // PROFILE:READ phone: true, // PHONE:READ contacts: true, // CONTACTS:READ assets: true, // ASSET:READ snapshots: true, // SNAPSHOTS:READ messages: true, // MESSAGES:REPRESENT collectibles: true, // COLLECTIBLES:READ}; const params = { scope, // 默认 profile:true client_id: 'uuid', // 指定授权的机器人 client_id return_to: '/returnTest', // 用户授权完了之后的回调页面路由() state: 'stateTest', // 回调页面会携带这个参数 useCDN: false, // 是否使用 国内加速域名,默认开启}; Mixin.toAuthPage(params);用户授权后,会跳转到回调页面,此时可以获取到
code。回调页面的配置就是下图的验证网址。
如果按照上述第三步和第四步的配置,那么回调页面的
url就是http://192.168.50.160:8000/auth?code=xxx&state=stateTest&return_to=/returnTest,此时可以在回调页面获取到code、state、return_to。将
code发送到自己的服务器,自己的服务器通过code获取用户的access_token和scope,服务端详情参见 用户授权
3. 应用内完成授权获取 code#
无需跳转到授权页面,直接在当前页面完成授权。相比传统的回调页面授权的方式,
- 用户体验要更好。
- 开发者使用也更便捷。
- 推荐使用。
使用静默授权的方式只有一步就可以拿到 code
import {MixinLogin} from 'mixin-web-sdk'
async getCode(){ const scope = { profile: true, // PROFILE:READ phone: true, // PHONE:READ contacts: true, // CONTACTS:READ assets: true, // ASSET:READ snapshots: true, // SNAPSHOTS:READ messages: true, // MESSAGES:REPRESENT collectibles: true, // COLLECTIBLES:READ }; const { authorization_code } = await MixinLogin('use client_id replace here', scope);}可以无视回调页面的授权配置以及页面传参的 state 和 return_to。直接在当前页面拿到 code。
然后将 code 发送到自己的服务器,自己的服务器通过 code 获取用户的 access_token 和 scope,服务端详情参见 用户授权
返回值#
{ "code_id": "string", "authorization_id": "string", "authorization_code": "string", // 授权码,用于获取 access_token "scopes": "string[]", // 用户授权的范围 "user": {...}, // 授权的用户信息 "app": {...}, // bot 的信息。}提示
当 scopes.length === 0 时,表示用户拒绝授权。此时 authorization_code 为空。
4. 静默授权#
此方法无需获得用户授权,不过需要用户在与 Bot 的会话中打开机器人首页时才有效。
思路如下:
- 先获取
conversation_id,可以通过Mixin.getConversationId方法获取。 - 将
conversation_id传给后端,后端通过conversation_id获取到会话信息conversation。 - 如果
conversation.category === 'CONTACT',则可以通过conversation.participants获取到会话中的用户信息。 - 如果会话中的一个用户是
Bot,那么另外一个用户就是打开页面的用户。 - 再根据用户的
user_id就可以获取到用户信息了。
警告
此方法有很多风险。
比如用户可以通过修改 conversation_id 来伪造用户信息。
或者用户在群聊、其他单聊中打开机器人首页等。
所以不建议使用。仅提供思路。