Appearance
服务端登录门禁
声明 userInfo 后,小程序可以把“取得授权码并交给开发者服务端”收敛成一个用户操作函数。auth.login() 本身不依赖 network;以下示例使用 network.request() 传递 code,因此还需声明并获得 network 的平台批准:
示例中的 URL 是开发者自己的后端接口,不是黑盒 OpenAPI 地址。
ts
import hbSDK, { HbMiniProgramSDKError } from '@heybox/hb-sdk'
export async function createServerSessionFromUserAction() {
try {
const { code } = await hbSDK.auth.login({ scopes: ['profile'] })
return await hbSDK.network.request({
url: 'https://api.example.com/session/heybox',
method: 'POST',
data: { code },
})
} catch (error) {
if (error instanceof HbMiniProgramSDKError && error.code === 'AUTHORIZATION_CANCELLED') {
return undefined
}
throw error
}
}业务按钮里使用:
ts
async function handleSubmit() {
const session = await createServerSessionFromUserAction()
if (!session) return
// 继续执行需要开发者服务端身份的业务动作
}按钮在页面初始化时通过 getHandshakeState() 读取握手状态,并通过 onHandshakeStateChange() 持续更新;只在 status === 'ready' 时启用,组件卸载时调用订阅返回的取消函数。点击回调直接进入 createServerSessionFromUserAction(),不要在其中等待握手。完整接线见快速开始。
注意事项
完整授权契约见用户身份与登录。本页只保留调用骨架。
保存 token 与恢复会话
需要持久化业务 token 时,将 auth.login() 同次返回的 accountKey 与 token 一起保存。 启动、show 和账号变化通知都必须确认账号一致;换票期间切号则丢弃旧结果。 完整状态规则与并发保护骨架只维护在业务会话的账号一致性。