From 94a97190dd15e85c4543966744e964e4087c8b48 Mon Sep 17 00:00:00 2001 From: COOL Date: Sun, 16 Apr 2023 20:11:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Eapp=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/user/entity/info.ts | 5 +--- src/modules/user/service/login.ts | 42 +++---------------------------- src/modules/user/service/wx.ts | 36 +++++++++++++++----------- 3 files changed, 26 insertions(+), 57 deletions(-) diff --git a/src/modules/user/entity/info.ts b/src/modules/user/entity/info.ts index df34eed..44048f0 100644 --- a/src/modules/user/entity/info.ts +++ b/src/modules/user/entity/info.ts @@ -26,9 +26,6 @@ export class UserInfoEntity extends BaseEntity { @Column({ comment: '状态 0-禁用 1-正常', default: 1 }) status: number; - @Column({ comment: '登录方式 0-小程序 1-公众号 2-H5 3-APP', default: 0 }) + @Column({ comment: '登录方式 0-小程序 1-公众号 2-H5', default: 0 }) loginType: number; - - @Column({ comment: '标签,多个标签按“,”隔开', nullable: true }) - labels: string; } diff --git a/src/modules/user/service/login.ts b/src/modules/user/service/login.ts index 58f5b5f..c8b36b9 100644 --- a/src/modules/user/service/login.ts +++ b/src/modules/user/service/login.ts @@ -99,12 +99,11 @@ export class UserLoginService extends BaseService { ); return this.wxLoginToken(wxUserInfo); } else { - throw new CoolCommException('微信登录失败'); + throw new Error('微信登录失败'); } } /** -<<<<<<< HEAD * 保存微信信息 * @param wxUserInfo * @param type @@ -121,19 +120,6 @@ export class UserLoginService extends BaseService { type, }); return wxUserInfo; -======= - * 保存/更新 微信信息(根据微信规则,用户头像昵称无法在此获取,需要通过chooseAvatar进行获取) - * @param wxUserInfo 微信里的用户信息 - * @returns - */ - async saveWxInfo(wxUserInfo) { - const wxInfo = await this.userWxEntity.findOneBy({ openid: wxUserInfo.openid }); - if (!wxInfo) { - await this.userWxEntity.insert(wxInfo); - } - await this.userWxEntity.save(Object.assign(wxInfo, wxUserInfo)); - return wxInfo; ->>>>>>> 6a9a421c61366184f92aea3f742a577d944d2879 } /** @@ -149,28 +135,21 @@ export class UserLoginService extends BaseService { iv ); if (wxUserInfo) { -<<<<<<< HEAD // 保存 wxUserInfo = await this.saveWxInfo(wxUserInfo, 0); return await this.wxLoginToken(wxUserInfo); -======= - wxUserInfo = await this.saveWxInfo(wxUserInfo); - return this.wxLoginToken(wxUserInfo, 0); ->>>>>>> 6a9a421c61366184f92aea3f742a577d944d2879 } } /** * 微信登录 获得token * @param wxUserInfo 微信用户信息 - * @param loginType 登录方式 0-小程序 1-公众号 2-H5 * @returns */ - async wxLoginToken(wxUserInfo, loginType) { + async wxLoginToken(wxUserInfo) { const unionid = wxUserInfo.unionid ? wxUserInfo.unionid : wxUserInfo.openid; - let userInfo: UserInfoEntity = await this.userInfoEntity.findOneBy({ unionid }); + let userInfo: any = await this.userInfoEntity.findOneBy({ unionid }); if (!userInfo) { -<<<<<<< HEAD const avatarUrl = await this.file.downAndUpload( wxUserInfo.avatarUrl, uuid() + '.png' @@ -204,22 +183,7 @@ export class UserLoginService extends BaseService { throw new CoolCommException( '刷新token失败,请检查refreshToken是否正确或过期' ); -======= - userInfo = new UserInfoEntity(); - Object.assign(userInfo, { - unionid, - loginType, - ...wxUserInfo - }); - await this.userInfoEntity.insert(userInfo); ->>>>>>> 6a9a421c61366184f92aea3f742a577d944d2879 } - if (userInfo.status === 0) { - throw new CoolCommException('您已违规被禁用'); - } - // 更新登录时间 - await this.userInfoEntity.save(Object.assign(userInfo, wxUserInfo)); - return this.token({ userId: userInfo.id }); } /** diff --git a/src/modules/user/service/wx.ts b/src/modules/user/service/wx.ts index 46ab3a4..2d2ec87 100644 --- a/src/modules/user/service/wx.ts +++ b/src/modules/user/service/wx.ts @@ -2,10 +2,6 @@ import { Config, Provide } from '@midwayjs/decorator'; import { BaseService, CoolCommException } from '@cool-midway/core'; import axios from 'axios'; import * as crypto from 'crypto'; -import * as _ from 'lodash'; - -// 微信请求域名 -const wxBaseUrl = 'https://api.weixin.qq.com'; /** * 微信 @@ -30,8 +26,9 @@ export class UserWxService extends BaseService { * @param secret */ public async getWxToken(type = 'mp') { + //@ts-ignore const conf = this.config.wx[type]; - return await axios.get(wxBaseUrl + '/cgi-bin/token', { + return await axios.get('https://api.weixin.qq.com/cgi-bin/token', { params: { grant_type: 'client_credential', appid: conf.appid, @@ -46,7 +43,7 @@ export class UserWxService extends BaseService { */ async openOrMpUserInfo(token) { return await axios - .get(wxBaseUrl + '/sns/userinfo', { + .get('https://api.weixin.qq.com/sns/userinfo', { params: { access_token: token.access_token, openid: token.openid, @@ -59,13 +56,13 @@ export class UserWxService extends BaseService { } /** - * 获得token + * 获得token嗯 * @param code * @param conf */ async openOrMpToken(code, conf) { const result = await axios.get( - wxBaseUrl + '/sns/oauth2/access_token', + 'https://api.weixin.qq.com/sns/oauth2/access_token', { params: { appid: conf.appid, @@ -86,7 +83,7 @@ export class UserWxService extends BaseService { async miniSession(code) { const { appid, secret } = this.config.wx.mini; const result = await axios.get( - wxBaseUrl + '/sns/jscode2session', + 'https://api.weixin.qq.com/sns/jscode2session', { params: { appid, @@ -116,10 +113,15 @@ export class UserWxService extends BaseService { iv, session.session_key ); - delete info['watermark']; - info.openid = session['openid']; - info.unionid = session['unionid']; - return _.pickBy({ ...info }); + if (info) { + delete info['watermark']; + return { + ...info, + openid: session['openid'], + unionid: session['unionid'], + }; + } + return null; } /** @@ -147,11 +149,17 @@ export class UserWxService extends BaseService { encryptedData = Buffer.from(encryptedData, 'base64'); iv = Buffer.from(iv, 'base64'); try { + // 解密 const decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv); + // 设置自动 padding 为 true,删除填充补位 decipher.setAutoPadding(true); + // @ts-ignore let decoded = decipher.update(encryptedData, 'binary', 'utf8'); + // @ts-ignore decoded += decipher.final('utf8'); - return JSON.parse(decoded); + // @ts-ignore + decoded = JSON.parse(decoded); + return decoded; } catch (err) { throw new CoolCommException('获得信息失败'); }