uni-app中uni.login的onlyAuthorize参数设置无效,app中微信登录依然不返回code

uni-app中uni.login的onlyAuthorize参数设置无效,app中微信登录依然不返回code

开发环境 版本号 项目创建方式
Windows win10企业版 HBuilderX

示例代码:

uni.login({  
    provider:"weixin",  
    onlyAuthorize:true,  
    success(loginRes) {  
        console.log("wxlogin",loginRes);  

        let reqparam={  
            code : loginRes.code,  
            channel:that.$runplatform  
        }  

    },  
    fail(e) {  
        uni.showToast({  
            title:"失败"+e.errMsg  
        });  
        console.log("登录失败");  
        console.log(e);  
    }  
});

操作步骤:

在app 中调用微信授权登录 uni.login。设置参数为 onlyAuthorize:true 即可复现。返回值没有code还是 只有 authResult

预期结果:

返回 code.由服务端来换取openid和unionid

实际结果:

{  
    "authResult": {  
        "access_token": "48_v15-uMrU23CufomJX8BFsWNUz8yidvtA2S7-5-sDQcDEv8mfe6bGvjmWQNbwxWJNrKzN_2IcCMkOwt8o5HxT-mp-5iMsRguWVcbcEGjesYI",  
        "expires_in": 7200,  
        "refresh_token": "48_WVKEFnzl2aNclCn0gXyRV-JbJIA29JQobmU8tAq3i9ubFELmwYdt3BMiyTHLnvHS1RantZSxd0CgsAIXo7GkZ_YG2WphuVhkZeloPkFTNzs",  
        "openid": "oRrdQt1j9yAfQtgY4gDFJHLzxdsU",  
        "scope": "snsapi_userinfo",  
        "unionid": "oU5Yyt2blg4mHvRe8dJoz974RkAk"  
    },  
    "errMsg": "login:ok"  
}

bug描述:

uni.login中的onlyAuthorize 参数 设置无效。

问题复现步骤:

在app中用微信登录。

uni.login({  
    provider:"weixin",  
    onlyAuthorize:true,  
    success(loginRes) {  
}  
});

更多关于uni-app中uni.login的onlyAuthorize参数设置无效,app中微信登录依然不返回code的实战教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

+1,
希望官方能把该死的 appsecret 改成选填的,开启 onlyAuthorize 只拿 code 不应该填 appsecret
{
“code”: -7,
“message”: “业务参数配置缺失,http://ask.dcloud.net.cn/article/282
}

更多关于uni-app中uni.login的onlyAuthorize参数设置无效,app中微信登录依然不返回code的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni.login加了 onlyAuthorize: true后,调用uni.getUserInfo没有任何返回,很奇怪。不加就能正常调用,文档也没写清楚,有没有人知道咋整。

同样遇到,怎么解决?!!!

等官方修复,还有个问题:若关联了开放平台,有时候会返回unionid,有时候不会,哎。不知道咋绕过去

回复 为什么: 这个没发现,等不及了暂时直接把access_token和openid发后端去获取用户信息了

回复 2***@qq.com: 我也是如此处理的,等不了了,只能改后端代码。直接把openid和unionid传后端处理的

我也遇到同样问题:
后面发现onlyAuthorize参数是要求版本 3.2.3 +,目前使用的最新版本是 3.2.3,于是下载3.2.6.20210901-alpha版本Hbuildx,重新打包自定义基座, 成功返回了code

相同的问题,怎么解决,想改安卓源码,github上代码却不是最新的

我是换成alpha版本的Hbuildx开发工具,设置onlyAuthorize:true,,成功返回了code,现在我的版本是最新3.2.8.20210923-alpha,也不需要配置appsecret

回复 Dorisup: enen 更新了3.2.6的基座和3.2.9的hbuilder后可以了

onlyAuthorize: true 参数在 App 端微信登录时,其行为与预期不符,这是当前 uni-app 框架的一个已知限制。

原因分析: 在 App 端,uni.login 对接的是微信官方 SDK。当设置 onlyAuthorize: true 时,微信 SDK 本身返回的就是 OAuth2.0 的 access_token 等授权信息,而不是网页授权流程中的 codecode 是微信网页授权(OAuth2.0 授权码模式)特有的参数,用于通过服务器端安全换取 access_token。而在 App 原生 SDK 登录流程中,微信 SDK 直接完成了授权和换取 access_token 的过程,因此返回的就是 access_token 本身。

解决方案:

  1. 移除 onlyAuthorize 参数:直接使用标准 uni.login 调用。在 App 端,成功回调中获取到的就是 authResult(包含 access_token, openid 等)。你需要将这个 access_tokenopenid 发送给你的服务器,服务器再用它们向微信服务器请求用户信息(如需)或进行账号绑定。
  2. 服务器处理调整:你的服务器端接口需要适配接收 access_tokenopenid,而不是 code。使用微信的 https://api.weixin.qq.com/sns/userinfo 等接口,配合 access_tokenopenid 即可获取用户信息。

代码调整示例:

uni.login({
    provider: "weixin",
    // 移除 onlyAuthorize: true
    success(loginRes) {
        console.log("wxlogin", loginRes);
        // loginRes.authResult 中包含 access_token, openid, unionid
        let authInfo = loginRes.authResult;
        let reqparam = {
            access_token: authInfo.access_token,
            openid: authInfo.openid,
            unionid: authInfo.unionid, // 如果有
            channel: that.$runplatform
        };
        // 将 reqparam 发送给你的服务器
    },
    fail(e) {
        // 错误处理
    }
});
回到顶部