免登录
收藏
我的收藏介绍
抖音云托管提供的是后端云服务,从一定程度上来说,和之前使用的服务器一样,都是为小程序的运行提供后端支撑的。
抖音云托管有很多优势,除了容器化之外,最核心的,就是其强大的抖音生态属性。
小程序原始实名登录
当服务端要判定一个小程序用户到底是谁的时候,原始登录流程如下:
通过小程序的 tt.login 方法,获取一个 code。使用这个 code 在后端向开放平台寻求认证,最终得到这个用户的身份 ID,一般叫做 openid(一个抖音用户和一个小程序的关系称为 openid,不同用户不同小程序的 openid 都不一样)。
由此我们可以判定身份,将自己业务的用户库和抖音的用户体系关联起来。
后端服务需要根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。在调用 tt.login 后,通过 code2session 接口获取的会话密钥
session_key
是对用户数据进行加密签名的密钥。为了应用自身的数据安全,不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。小程序原始匿名登录
抖音云托管登录优化
当项目从服务器迁移到抖音云中进行云托管时, code 置换登录的流程就没有存在的必要了。
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 中拿到信息后做业务判定,然后进行业务正常服务。
不仅省去了 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 登录这个流程,也没有什么问题。云托管并不会阻碍你这么用,但需要明确的是,这种情况并不是抖音云所推荐的,后续的迭代的功能都是基于云上的免登录流程。