uniapp微信小程序授权后得到“微信用户”

背景

近日在开发微信小程序的时候,发现数据库多了很多用户名称是"微信用户"的账号信息。接口的响应信息如下。

ini 复制代码
(nickName=微信用户, avatarUrl=https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132, gender=0, country=, province=, city=, language=), code=0e1abNFa1dBwRG0lnoJa18qT0i2abNFk)

经过排查,发现官方是对微信授权的接口做出了调整。小程序用户头像昵称获取规则调整公告

根据上面标红的字体说明,官方的意图就是只提供openid和unionid, 不暴露用户头像昵称数据。

基于此才会在新版的接口中返回"微信用户"的信息。

  • 针对这个问题,官方提供的解决方案如下。

以上解决方案,表达的意思是新版用户授权的接口中, 官方只会给你提供unionid和openid.

至于用户的昵称和头像,开发者可以提供功能,以用户的意志去完成修改和更新。
tips: 建议授权接口生成用户名和昵称,采用系统默认的方式。

微信授权流程

uniapp代码实现

uni.login接口文档

javascript 复制代码
var that = this;
let code = '';
//获取code
wx.login({
    success: (res) => {
            code = res.code
    }
});

//获取用户的信息和code一起传给后端, 进行保存。
uni.getUserProfile({
        desc:'登录',
        lang: 'zh_CN',
        success:(res)=>{
        console.log( 'wx.getUserProfile=>用户允许了授权' );  
        var data ={
            "userInfo": res.userInfo,
            "code": code
        };
        tui.request(url.login.wxAuth, "POST", data, false, false, false).then((res) =>         {
            isClick=true;
            if (res.code === 200 && res.success) {
                    store.commit('login', res.data);
                    if(path === undefined || path === ""){
                    uni.switchTab({
                            url:'/pages/me/index',
                            success(){
                                that.refresh();
                        }
                    })
                    }
            } else {
                    tui.toast(res.message);
            }
        }).catch((res) => {
                tui.toast(res.message);
        });
},
fail:(err)=>{
                console.log("--login error--"+ JSON.stringify(err));
                tui.toast(err);
        }
})

后端代码

ini 复制代码
@ApiOperation(value = "/newWxLogin", notes = "微信登录授权接口")
@PostMapping("newWxLogin")
public Result<?> newWxLogin(@RequestBody NewWxLoginReq newWxLoginReq) {
    log.info("newWxLogin:{}", newWxLoginReq);
    ValidatorUtils.validateEntity(newWxLoginReq);
    //获取用户的openId
    String openIdUrl = String.format(WxConstant.CODE_SESSION_URL, appId, appSecret, newWxLoginReq.getCode());
    String result1 = HttpRequest.get(openIdUrl).execute().body();
    log.info("newWxLogin.result1:{}", result1);
    JSONObject jsonObject = JSONObject.parseObject(result1);
    Assert.isTrue(StringUtils.isNoneBlank(jsonObject.getString(ERROR_CODE)), jsonObject.getString(ERROR_MSG));
    String openId = jsonObject.getString("openid");
    return userService.newWxLogin(openId, newWxLoginReq.getUserInfo());
}

public int insertNewWechatUser(WxUserReq wxUserReq, String roleCode) {
    User user = new User();
    String simpleUUID = IdUtil.simpleUUID();
    user.setId(simpleUUID);
    user.setThirdId(wxUserReq.getOpenId());
    user.setThirdType("wechat");
    //此处头像是随机生成
    String avatar = "http://cdn.zengzhang.vip/test/avatar/avatar"+RandomUtil.randomInt(20)+".png";
    user.setAvatar(avatar);
    //此处用户名随机生成
    String userName = "test" + RandomUtil.randomInt(100);
    user.setUsername(userName);
    user.setSex(wxUserReq.getGender().byteValue());
    user.setStatus(Byte.parseByte("1"));
    user.setUserIdentity(Byte.parseByte("1"));
    user.setCreateTime(LocalDateTime.now());
    String salt = oConvertUtils.randomGen(8);
    user.setSalt(salt);
    user.setDelFlag(Byte.parseByte("0"));
    user.setRealname(filterEmoji(wxUserReq.getNickName()));
    String passwordEncode = PasswordUtil.encrypt(wxUserReq.getNickName(), PASSWORD, salt);
    user.setPassword(passwordEncode);
    save(user);
    //关联用户角色
    userRoleService.insertUserRole(roleCode, simpleUUID);
    return 1;
}

上述就是解决这个问题的步骤, 关于头像修改,和昵称修改的功能就不展示了。

相关推荐
IT_陈寒16 分钟前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫43 分钟前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus1 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬2 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
Zhao-Jichao2 小时前
AI Prompting for Everyone 课程笔记 - P17 图像生成 Imaging Generation
前端
Highcharts.js3 小时前
智能数据分析组件Orbit 正式发布与快速上手体验教程
前端·人工智能·信息可视化·数据分析系统·highcharts·orbit·智能可视化
螺丝钉tina4 小时前
[Playwright ][16]Playwright + TypeScript API 自动化测试实战:API测试
前端·javascript·typescript
小天源5 小时前
智叟云集系统 · 架构与职责分层
服务器·前端·数据库
Highcharts.js6 小时前
React 中原生支持使用 JSX 组件配置自定义表格 Highcharts Grid
前端·javascript·react.js·前端框架·jsx·highcharts·自定义表格
薛定谔的猫-菜鸟程序员6 小时前
Electron开发超详细教程(从入门到放弃)
前端·javascript·electron