求文档介绍小程序和云引擎之间如何维护session?

在云引擎中登录之后,通过 user.getSessionToken() 拿到 sessionToken 作为登录函数的返回值返回给客户端,在客户端通过 AV.User.become(sessionToken) 持久化当前的用户。在之后发送的请求中就能直接拿到 currentUser 了。

非常感谢,谢谢!

@leeyeh AV.User.become(sessionToken) 后能获取到在User表中设置的客户端不可见字段,有什么办法吗?

不应该啊,难道你使用了 masterKey?

@leeyeh 嗯,对,应为要查询_User 表的 union字段等等,所以得使用masterkey, ,然后在cloud上使用signUpOrlogInWithAuthData登录时添加{useMasterKey: false}并没有效果,有解决办法吗?

AV.User.signUpOrlogInWithAuthData(auth, dataPackage.wxappName,{useMasterKey: false}

这个 API 还真没有第三个参数。

user.set("authData", authData).save({useMasterKey:true}).then(

不使用{useMasterKey:true} 会报没有权限,
使用{useMasterKey:true} 会报Error: The user cannot be altered by a client without the session.

最根本的需求是这样的: 云引擎需要支持微信公众号,多个小程序,所以需要unionid,但是小程序sdk自带一键登录缺陷:1.只能固定一个微信小程序,authData内固定一个lcweapp,不能支持同一个用户使用多个微信小程序一键登录,2.没有unionid,获取uniondid需要wx.login的code,但是这个code已经被一键登录用过了,所以使用hook来更新uniondid也行不通。

希望官方能优化一键登录流程,这样我们就能省很多事。
一键登录sdk优化建议:
1. 增加参数1: wxappName参数,对应不同小程序,体现在authData里面。
2.增加参数2: isGetUserInfo,如果为true,在登录之前先取得用户信息,iv,encryptedData,code,一并提交,服务器 此时就能解析到unionId(用户即使只使用了1个小程序,没有关注公众号也能有unionId)
3一键登录逻辑:因为getUserInfo需要授权,检查用户之前是否拒绝过,如果被拒绝过,需要在sdk中调用wx.openSetting ,让用户重新授权。

4,云端:User表: 增加wxUnionId字段(客户端不可见),增加hasUnionId字段(客户端可见,代表用户是否授权获得uniondid),authData中不要固定为lc_weapp,

这样既能兼容单个微信app的,又能扩展支持具有多个公众号+多个小程序的unionId模式。真正做到一键登录,现在真的很头疼。。。。。

@leeyeh

1 人赞了这个帖子.

当下怎么办?

不调用一键登录 API,自行通过 getUserInfo 拿到用户信息发到后端解密出 unionId 登录,之后把 登录成功的 sessionId 发回前端。

嗯,但是会得到User表中设置的客户端不可见字段

解出unionId后,怎么用unionid 登录?
api只看到 signUpOrLoginWithAuthData, 调用这个就得先使用(masterkey)查询unionid字段更新authData() ,再使用signUpOrLoginWithAuthData 这个时候得到的就包含敏感信息了,是我哪里弄错了吗?
@leeyeh

我没有理解在云引擎里登录时,会得到User表中设置的客户端不可见字段,会有什么问题吗?

反正我们也只需要其中的 sessionToken 用来传回给客户端啊。

@leeyeh
客户端也能得到。
用这个sessionToken 调用became后,也能得到不可见字段

我发现好像是的,我去调查下。

没人了吗?

你好,确认了下,客户端确实是能得到 authData 中的信息的。

对,还有设置的客户端不可见字段,有什么办法或者sdk会更新吗?
@leeyeh 感谢回复! 求指导解决办法