介绍

抖音云托管提供的是后端云服务,从一定程度上来说,和之前使用的服务器一样,都是为小程序的运行提供后端支撑的。
抖音云托管有很多优势,除了容器化之外,最核心的,就是其强大的抖音生态属性。

小程序原始实名登录

当服务端要判定一个小程序用户到底是谁的时候,原始登录流程如下:
通过小程序的 tt.login 方法,获取一个 code。使用这个 code 在后端向开放平台寻求认证,最终得到这个用户的身份 ID,一般叫做 openid(一个抖音用户和一个小程序的关系称为 openid,不同用户不同小程序的 openid 都不一样)。
由此我们可以判定身份,将自己业务的用户库和抖音的用户体系关联起来。
后端服务需要根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。在调用 tt.login 后,通过 code2session 接口获取的会话密钥 session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。

小程序原始匿名登录

匿名登录是当宿主端未登录,开发者发起tt.login的调用,且 force 字段为 false,则本次登录为匿名登录。

抖音云托管登录优化

当项目从服务器迁移到抖音云中进行云托管时, code 置换登录的流程就没有存在的必要了。
在小程序端,通过 cloud.callcontainer 向云托管服务发起请求时,服务可在 HTTP header 中获得该请求用户的全部信息。 匿名登录仅能获取到 AopenId
HTTP header
说明
X-TT-OPENID
小程序用户 openid
X-TT-APPID
小程序 AppID
X-TT-UNIONID
小程序用户 unionid
X-TT-ANONYMOUS-OPENID
小程序匿名用户在当前小程序的 ID
X-TT-ENV
所在云环境 ID
X-TT-SOURCE
调用来源(本次运行是被什么触发)
X-Forwarded-For
客户端 IPv4 或 IPv6 地址
在此可以直接从 HTTP header 中拿到信息后做业务判定,然后进行业务正常服务。
这个能力是不带任何条件的,小程序只要使用 cloud.callcontainer,云托管服务收到这个请求,信息就自然而然带入进来了。
不仅省去了 code 转换的步骤,而且还不需要自己做登录态了,可以在任意请求都可以拿到用户的身份信息。
如果你的业务本身并不需要用户的身份信息,则可以在 header 中添加如下记录:
'X-TT-EXCLUDE-CREDENTIALS': 'true'

后端代码示例:

//example func GetUserInfoFromHandler(w http.ResponseWriter, r *http.Request) { openId := r.Header.Get("X-TT-OPENID") if openId == "" { fmt.Fprint(w, "X-TT-OPENID 为空") return } }

常见问题

服务部署在抖音云上后,原有的code2session流程还可以使用吗?

如果坚持使用原本的 code2session 置换 code 登录这个流程,也没有什么问题。云托管并不会阻碍你这么用,但需要明确的是,这种情况并不是抖音云所推荐的,后续的迭代的功能都是基于云上的免登录流程。