本篇文章主要涉及内容:
- 网页授权界面不一致,授权时已进入应用界面
- 后台设置cookie丢失,通过js缓存cookie
- 自定义分享android与ios之间分享导致图片失效
网页授权界面不一致:
问题描述:
在OAuth2.0开发中,我们的授权登陆页面在'微信web开发工者工具'中如左图的样式,但是在
实际的应用场景中,我们会发现一个问题:授权登陆时,需要授权的页面内容已经加载。即使用户拒绝了授权依旧可以继续浏览我们提供的网页,但有时候我们需要实现用户只有在授权后才可以继续浏览的操作。
解决方式:添加首页,首页只做一件事,就是进行微信授权。如果用户拒绝授权,那么就会停留在当前空白页,不会跳转向我们真正的地址。后面我们分享出去的每一个链接都回加上这个前缀,这样就能保证未授权的用户必须进行授权才能访问。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="./js/jquery.min.js"></script> <script src="./js/jweixin-1.4.0.js"></script> <script> $(document).ready(function () { var search = document.location.search; var index1 = search.indexOf("?"); var redirectUrlStr = search.substring(index1 + 1); redirectUrlStr = redirectUrlStr; redirect_uri = encodeURIComponent(redirectUrlStr.replace("redirectUrl=", "")); window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb77b39207ae09678&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; }); </script> </head> <body> </body> </html>
通过JS存取CookieID
问题描述:最初,我是通过Java后端尝试将用户的openId写入到cookie,但实际开发过程,我发现传到前台时各种各样的原因导致cookie丢失。
解决方式:在授权登陆后通过用户的code码保存用户的获取用户的AccessToken信息到redis时,将openid返回到前台,并通过js存取cookie,后通过openid到后台交换数据。
function setCookie_OpenId(value) { var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000); document.cookie = "cookie_openId" + "=" + escape(value) + ";expires=" + exp.toGMTString(); console.log("设置openId:" + document.cookie); } function getCookie(name) { var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); if (arr = document.cookie.match(reg)) return unescape(arr[2]); else return null; }
自定义分享android与ios之间分享导致图片失效
问题描述: 微信分享到朋友和朋友圈时,当我们使用新的updateAppMessageShareData和updateTimelineShareData接口时,在安卓和ios之间分享时会导致分享时设置的imgUrl未生效,而且对应菜单的trigger监听事件也是无效的。
解决方式:切换接口,使用updateTimelineShareData
和onMenuShareTimeline