微信静默授权问题

微信中需要获取openid,为了安全起见,采用服务器端静默授权方式,最终过程是:

前端页面(获取openid) -> 指定服务器端地址 -> 服务器端跳转到微信授权页 -> 微信授权页跳回服务器端 -> 服务器端跳回前端页面

在这里会存在一个问题,即微信授权返回死循环问题,因为这边前端跳转全部都是使用replace跳转,所以不会在history上再增加1一个页面,后来以为是我们服务器的问题,然后撇开微信直接让服务器端返回一个假的openid发现是可以返回的,所以问题出在微信的授权问题上,即:无论前端跳转是否采用replace,使用微信授权,微信自动会在浏览器增加一条页面,即跳转微信授权前的一个页面,这样的话,当用户点击返回按钮的时候,自然是返回到没有授权页,然后没有授权页根据业务逻辑再继续发起授权请求,就这样陷入了无线循环之中。

也思考过一些解决方式,比如使用iframe来获取openid,比如使用XMLHttpRequest来代替服务器端跳转,这些全部都行不通,所以只能在请求授权页做手脚,即判断 是否应该去获取授权页,如果是因为返回进入该页面的 则执行history.back(),否则则进入微信授权模式,但是这种方式还是存在一个问题,即如果请求授权页本身就是首页怎么办,执行history.back()也不会让微信浏览器自动关闭,这个时候就会卡在这里,当然是可以使用微信JSSDK的closeWindow()方法,但是这种方式需要等待wx.config()完成,这里涉及到从服务器端获取签名等流程,具有明显的延时情况,造成一种很糟糕的用户体验,所以最终的解决方式是:

1:如果请求授权页是首页,当用户点击返回按钮的时候,还是走授权页,即陷入无限循环套路,

2:如果请求授权页不是首页,则执行higtory.back() 返回上一页

原文地址:https://www.cnblogs.com/mrzhu/p/11549789.html

时间: 2024-11-08 21:30:30

微信静默授权问题的相关文章

网站微信静默授权流程

静默授权登录方法写在基类中.需要静默授权注册登录的页面继承此方法即可. 1.  用户访问有调用此方法的页面 2.  判断是否登录状态,未登录则执行第三步 3.  判断是否微信中,如果是,则执行第四步 4.  判断url中是否有code参数(注:微信授权后的回调url中一定会带上此参数,所以,我们自己的站点切不可随意在url中加此参数).如果没有code参数,则执行第5步.否则,执行第7步 5.  判断用户24小时内是否主动点过退出登录,如果是,则不再执行静默授权登录流程.如果否,则执行第6步 6

微信静默授权

public class WXUtil { private static String appid = "";  private static String secret = ""; private static String token_url = "https://api.weixin.qq.com/cgi-bin/token"; private static String ticket_url = "https://api.wei

微信第三方登录与静默授权和非静默授权

微信的授权登录在日常应用中应用的非常广泛,最多就是第三方登录 微信登录分为两类:授权登录(非静默授权)与静默授权 授权登录:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关注相关微信公众号等都可以获取. 静默授权不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid,无法获取用户的个人信息,对于用户的简单认证还是很有用的.

微信公众号(静默授权和分享)

微信网页授权 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+ appId +'&redirect_uri=' + redirectUri + '&response_type=code&scope=snsapi_base#wechat_redirect' 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回

小程序-文章:微信第三方登录(静默授权和非静默授权)

ylbtech-小程序-文章:微信第三方登录(静默授权和非静默授权) 1.返回顶部 1. 用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 微信的授权登录在日常应用中应用的非常广泛,越来越多的平台支持用户使用微信进行授权第三方登录 使用微信授权登录有哪些优势/好处: 1.用户量足够大,基本所有用户都会有微信,登录起来比较方便快捷: 2.微信作为一个开放平台,为众多公众号/服务开放了许多服务接口,让公众号能够为自己的用户提供更加个性.更加优质

.NET Core中 实现H5微信登录(静默授权方式)

需求 假设现在有一个H5需要有微信登录.手机号登录.邮箱登录 三种登录方式.让我们一起来看看微信登录如何实现吧 界面: 最终实现的效果图(登录成功后返回个人页): 因为微信登录目前没有实现移动端的其他浏览器授权登录,所以,再用除微信以外的浏览器操作登录时,我们需要给出用户提醒,比如这样: 实现 准备工作 登录服务号或订阅号的微信公众号后台,找到AppId以及AppSecret.后面会用到 在公众号设置中,设置安全域名.js域名以及网页授权域名 其中再网页授权域名设置的时候需要注意,将腾讯提供的一

微信网页授权获取用户基本信息

微信公众号可以通过微信网页授权机制,来获取用户基本信息,可以用于微信登录功能 关于网页授权的两种scope的区别说明 1.静默授权:以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回调页(往往是业务页面) 2.显示授权:以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的.但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的

玩玩微信公众号Java版之六:微信网页授权

我们经常会访问一些网站,用微信登录的时候需要用到授权,那么微信网页授权是怎么一回事呢,一起来看看吧! 参考官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 官方的文档有很详细的说明,这里就主要分析重要的几点: 第一,网页授权分类及说明: 1.以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回调页(往往

微信网页授权-获取用户信息

第一步:修改网页授权安全域名,什么叫安全域名?安全域名就是说只有这个域名的网页才可以安全的进行网页授权以及获取用户信息. 第二步:下载下这个 MP_verify_Sb2ASLINFP09cMn6.txt(点击下载)放到你的服务器根目录下,可以通过你上面配置的域名直接访问的到,即:http://www.zheyue.me/MP_verify_Sb2ASLINFP09cMn6.txt  可以访问的到.点击确认完成. 第三步: 对自己做的网页地址进行包装,引导客户点击新包装的地址即可.例: https