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
+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 等授权信息,而不是网页授权流程中的 code。code 是微信网页授权(OAuth2.0 授权码模式)特有的参数,用于通过服务器端安全换取 access_token。而在 App 原生 SDK 登录流程中,微信 SDK 直接完成了授权和换取 access_token 的过程,因此返回的就是 access_token 本身。
解决方案:
- 移除
onlyAuthorize参数:直接使用标准uni.login调用。在 App 端,成功回调中获取到的就是authResult(包含access_token,openid等)。你需要将这个access_token和openid发送给你的服务器,服务器再用它们向微信服务器请求用户信息(如需)或进行账号绑定。 - 服务器处理调整:你的服务器端接口需要适配接收
access_token和openid,而不是code。使用微信的https://api.weixin.qq.com/sns/userinfo等接口,配合access_token和openid即可获取用户信息。
代码调整示例:
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) {
// 错误处理
}
});

