Просмотр исходного кода

feat: 更新账号登录逻辑,返回包含访问令牌、刷新令牌及项目列表的数据

lanjianrong 3 месяцев назад
Родитель
Сommit
e12ad332ad
2 измененных файлов с 19 добавлено и 7 удалено
  1. 2 2
      app/controller/weapp_controller.js
  2. 17 5
      app/service/weapp.js

+ 2 - 2
app/controller/weapp_controller.js

@@ -17,8 +17,8 @@ module.exports = app => {
                 if (!code || !account || !password) {
                 if (!code || !account || !password) {
                     throw '缺少必要参数';
                     throw '缺少必要参数';
                 }
                 }
-                const token = await ctx.service.weapp.accountlogin({ code, account, password });
-                ctx.body = { code: 0, msg: '登录成功', data: { access_token: token } };
+                const { accessToken, refreshToken, pList } = await ctx.service.weapp.accountlogin({ code, account, password });
+                ctx.body = { code: 0, msg: '登录成功', data: { access_token: accessToken, refresh_token: refreshToken, projects: pList } };
             } catch (error) {
             } catch (error) {
                 this.log(error);
                 this.log(error);
                 ctx.body = { code: -1, msg: error.toString(), data: null };
                 ctx.body = { code: -1, msg: error.toString(), data: null };

+ 17 - 5
app/service/weapp.js

@@ -35,21 +35,34 @@ module.exports = app => {
             if (!isPasswordValid) {
             if (!isPasswordValid) {
                 throw '帐号或密码错误';
                 throw '帐号或密码错误';
             }
             }
+            const paList = await this.ctx.service.projectAccount.getAllDataByCondition({ where: { wx_openid: projectAccount.openid } });
+            const pidList = this.ctx.app._.uniq(this.ctx.app._.map(paList, 'project_id'));
+            const pList = [];
+            for (const p of pidList) {
+                const project = await this.ctx.service.project.getDataById(p);
+                if (project) {
+                    pList.push({ code: project.code, name: project.name });
+                }
+            }
+            if (pList.length === 0) {
+                throw '该微信号未绑定任何项目';
+            }
+
             const accessToken = jwt.sign(
             const accessToken = jwt.sign(
-                { accountId: projectAccount.id, type: 'access' },
+                { accountId: projectAccount.openid, type: 'access' },
                 weappConfig.jwtSecret,
                 weappConfig.jwtSecret,
                 { expiresIn: weappConfig.accessTokenExpiresIn }
                 { expiresIn: weappConfig.accessTokenExpiresIn }
             );
             );
 
 
             const refreshToken = jwt.sign(
             const refreshToken = jwt.sign(
-                { accountId: projectAccount.id, type: 'refresh' },
+                { accountId: projectAccount.openid, type: 'refresh' },
                 weappConfig.jwtSecret,
                 weappConfig.jwtSecret,
                 { expiresIn: weappConfig.refreshTokenExpiresIn }
                 { expiresIn: weappConfig.refreshTokenExpiresIn }
             );
             );
                 // 3. 存入 Redis:pid 对应最新 refreshToken
                 // 3. 存入 Redis:pid 对应最新 refreshToken
-            const key = `user:${projectAccount.id}:refresh_token`;
+            const key = `user:${projectAccount.openid}:refresh_token`;
             await app.redis.set(key, refreshToken, 'EX', weappConfig.redisExpire);
             await app.redis.set(key, refreshToken, 'EX', weappConfig.redisExpire);
-            return { accessToken, refreshToken };
+            return { accessToken, refreshToken, pList };
         }
         }
 
 
         // 微信快捷登录
         // 微信快捷登录
@@ -65,7 +78,6 @@ module.exports = app => {
                 });
                 });
 
 
                 const { openid, errcode } = wxRes.data;
                 const { openid, errcode } = wxRes.data;
-                console.log('openid', openid);
 
 
                 if (errcode || !openid) throw '微信授权登录失败';
                 if (errcode || !openid) throw '微信授权登录失败';