帖子
帖子
用户
博客
课程
1234567下一页
返回列表 发新帖
0
帖子
0
勋章
4
Y币
官方技术交流群:339762594
3
帖子
0
勋章
21
Y币
回帖奖励 +1 云币
9
帖子
0
勋章
113
Y币
可同时编译为 Android & iOS App 以及微信小程序
22
帖子
0
勋章
81
Y币
回复本帖可获得 1 云币奖励! 每人限 1 次
36
帖子
3
勋章
1637
Y币
请教一下,关于本例oauth.stml,内有一个loginWithData(postData)函数.代码:
                loginWithData(postData){
                        $util.ajax({
                                method:'post',
                                url:'members/oauth',
                                data:{
                                        body:postData
                                }
                        }, function(ret, err){
                                if (ret) {
                                        if (ret.status == 0) {
                                                $util.toast('登录成功');
                                                UserCenter.setUserInfo(ret.udata);
                                                api.closeWin();
                                        }
                                } else {
                                        $util.toast('登录失败');
                                }
                        });
                },

       其中url:'members/oauth',云端函数代码能否分享一下,关键是想看一下,如何获取、处理token等。谢谢!
18
帖子
1
勋章
2万+
Y币
学习学习
0
帖子
0
勋章
2
Y币
68487001我们班的人生地不熟的人
28
帖子
1
勋章
1万+
Y币
ntfa 发表于 2021-1-27 14:24
请教一下,关于本例oauth.stml,内有一个loginWithData(postData)函数.代码:
                loginWithData(postData){
         ...

这个例子里面是登录后生成了一个 access_token,和用户绑定,然后返回给前端:

member.oauth = async(req)=> {
        try {
          const data = req.body;
          let res = await member.codeToUserInfo(data.code);
          if (!res.openid) {
                 return { status: 1, msg: "授权登录失败:"+res.errmsg+""};
          }
          let user = await member.findOne({where:{openid:res.openid}});
          const crypto =  Models.api.crypto;
          let access_token = crypto.createHash('md5').update(res.openid + new Date().getTime()).digest("hex");
          if (user) {
                  await member.updateAll({ id:user.id }, {access_token:access_token});
                  user.access_token = access_token;
          } else {
                  let sexArr = ['未知','男','女'];
                  let add = {
                          'openid':res.openid,
                          'nickname':data.userInfo.nickName,
                          'sex':sexArr[data.userInfo.gender],
                          'avatar':data.userInfo.avatarUrl,
                          'city':data.userInfo.city,
                          'country':data.userInfo.country,
                          'province':data.userInfo.province,
                          'access_token':access_token
                  };
                  await member.create(add);
                  delete add.openid;
                  user = add;
          }
          return { status: 0, udata:user, msg:"登录成功"};
  } catch (err) {
          Models.api.console(err);
          return {status: 1,err:err,req: req.query,msg: "获取失败"};
  }
};

前端在后面访问接口时会在 header 里面带上该 access_token,服务端在需要登录的接口中调用 getUser 方法进行验证:

async function getUser(req,need) {
  try {
         const token = req.header('X-APPTOKEN') || null;
         if (need && !token) {
                 throw new gError('缺少token', 110);
         }
         let udata = await Models.member.tokenToUser(token);
         if (need && !udata) {
                 throw new gError('未找到用户信息', 110);
         }
         return udata;
  } catch(err) {
          throw new gError(G.needUserLoginMsg, 120);
  }
}
36
帖子
3
勋章
1637
Y币
高!学习了,谢谢!
1
帖子
0
勋章
7
Y币
你好,我是初学者,下载了源码以后,怎么和云数据连接,谢谢
1234567下一页
您需要登录后才可以回帖 登录

本版积分规则