背景:用户未登录,从A页面进入B页面,B页面进入C页面,C页面需要登录,微信授权登录成功回到B页面,点击返回会进入微信授权页。自动授权后再次进入B页面,在B页面点击返回没有回到A页面。
例子:未登录从商品列表页进入商品详情页,点击购买(购买需要登录),跳转到登陆页面,登录成功会自动返回到商品详情页。在商品详情页点击返回,会回到登录授权页重新授权。无法回到商品列表页。
期望:未登录状态从A => B => C(需要登陆),登陆成功后,在B页面点击返回能够直接回到A页面(例如:在商品详情页点击返回,能返回到商品列表页)
备注:微信授权使用的静默授权,尝试过的方案:监听手机物理返回键,监听返回按钮使用的方法是popstate与history。但是手机真机调试监听不到。
微信搜索公众号 :商城开发体验版 能够复现问题。
bug复现链接:https://mshow-cdn.01mshow.com/file/201/202007/15/20200715113544353577187.mp4
如果有需要请加微信:ahlp1012 或者 xiezhihao123
请问有没有什么方法能够解决这个问题。
navigateTo ,会有第一层 第二层 第三层 这样子,然后点返回 就是会 三退到 二 二退到一
但是重定向就不会发生这样的问题
不好意思啊。不是小程序。是微信公众号
https://developers.weixin.qq.com/community/develop/doc/0006a4e8154e88167bf90914b56c00
我知道了....你写重复了....B页面 应该有个状态
B页面 是不是只要进了 就去授权登录....
肯定死循环在这里了
如果是H5,那更好解决...你应该有session态...每次来 每次通过api去获取后台有没有登录状态,有就不操作...这样就行了
返回是微信自带的还是自己做的?
返回上一页历史记录是授权页没毛病,还有就是登录状态记录下来没有?
你用什么方法实现的?直接在页面做的判断还是用路由守卫?
授权是这样写的
返回上一页就会一直进入我圈出来的页面。
登陆状态在路由守卫里面记录的
我有一个登陆页面,要在登陆页面里点击按钮 才能去登录
点击 全部商品 三次 全都打不开。。
按照你说的 有俩可能的原因:
1.登录页面有问题 登录成功之后 没有取到登录信息 导致重新登录
2.返回的 可能是缓存 也就是登录之前的内容
不好意思啊 要点击公众号菜单栏的首页就可以进来
返回的页面是拼接在微信授权链接里面的重定向页面
location.replace使用location.href="";代替试试看
location.replace有一个特性 比如
进入A页面 然后使用location.replace替换成B页面 这个时候点击浏览器的返回 、
是回不到A页面的 就是说location.replace会删除A页面的浏览记录 换成B的记录
location.href不会这样做
还是一样的会回到授权回调的页面 就是这个
加判断
if(to.name=="订单页"){
window.location.href=newUrl
}else{
window.location.replace(newUrl)
}
你用路由 然后路由死循环了
判断我尝试过。就是判断to.path 是授权页 我就跳转到其他页面。但是在不同的页面登陆下 我想跳转的页面不一定是同一个。所以有没有什么方法可以记录下历史记录?
是的 是路由死循环了。但是我不知道怎么解决
https://blog.csdn.net/dianchou8532/article/details/101994999
首先两种判断情况
1、没有code(又分有session无session,无session重定向)
2、有code(有session,验证对否过期,过期用code换取session,无session用code换取session,就是调登录接口)
路由守卫那里贴一下代码
跟https://blog.csdn.net/dianchou8532/article/details/101994999这个不太一样。因为微信授权的回调页面已经在历史记录里面了
我点击手机的返回 跳转的地址是 https://wa1.devaqk.com/connect/oauth2/authorize?oldReferer=https%3A%2F%2Fmall-dzg.devaqk.com%2Flogin%2FwxEnd%3Frefer%3D%252Fproduct-detail%252F50731&code= 然后这个页面有一段JS代码
又跳转到了https://mall-dzg.devaqk.com/login/wxEnd?refer=%2Fproduct-detail%2F50731&code=这个地址
这里有俩问题:
1.点击返回跳转到 /connect/oauth2/authorize?oldReferer= 是否正确 注意参数是oldReferer 不是redirect_uri
2.从/connect/oauth2/authorize?oldReferer=跳转到 /login/wxEnd?refer=这个地址 逻辑是否正确?
路由守卫的代码
code丢失了?你没有记录code吗?
不好意思啊 我点击返回 没看到https://wa1.devaqk.com/connect/oauth2/authorize?oldReferer=https%3A%2F%2Fmall-dzg.devaqk.com%2Flogin%2FwxEnd%3Frefer%3D%252Fproduct-detail%252F50731&code=这个地址。请问怎么看啊
我看一下有没有记录啊。因为这个不是我写的,我没搞过授权 可能有点不太懂
就这里掉了一个接口
endLoginUrl这个地址是有问题的,你那个wxBegin那个方法哪里调用的?什么情况下调用
然后 begin 是这里调用的
这里有俩问题:
1.点击返回跳转到 /connect/oauth2/authorize?oldReferer= 是否正确 注意参数是oldReferer 不是redirect_uri(这个错了后面的全错)
2.从/connect/oauth2/authorize?oldReferer=跳转到 /login/wxEnd?refer=这个地址 逻辑是否正确?(这个错了 还可以修改)
就是说我点击返回 跳转的起始地址不是列表和详情 而是一个貌似授权的地址
一个授权的地址 跳到了/login/wxEnd?refer= 这个另一个授权的地址。。
那请问是不是从登录开始其实就有问题了?
你有没有存code的?对code做判断?
code是授权返回的是吗。我在代码里面没看见存
在上面跳转的网址里有code参数 。。
我问那个问题的原因是怕 一开始返回的地址就是错的 那后面的处理逻辑 也就都错了
我只是想确定 是开始返回的地址就是错的 还是中间跳转的过程中错了
对,拿code做判断
开始返回的地址是指 redirect_uri 这个吗。
可以做判断。但是比如我a => b , c=>d 这个时候我就不知道我要返回 a 还是返回 c
code: this.$route.query.code
code1:localStorage.getItem('code')
//两者做比较
if (!this.code && !this.code1) {
let url = ``
window.location.replace(url)
} else if(!this.code){
localStorage.setItem('code', this.code1)
history.back()
}
就是多个场景进入的话 返回的页面不一样。我不知道什么时候返回哪个页面
重定向的时候你带个参数 让你的重定向页面知道 是登录后的页面...不再去启动登录事件 不就好了吗
不是 开始返回的地址是指 点击返回按钮的时候 你期望跳转的地址是什么 ??跟我上面的一样不一样?
如果不一样的话 你知道为什么 我点击返回 跳转的是上面那个地址吗?那个地址在哪配置的?
返回跳转到的页面就是授权页。自动就重新授权了。。
那我看下是不是期望的
钉钉18061904250 说了半天 我远程给你看吧
好的 我电脑没钉钉 我先下一个
解决没有,没有加我微信dear-151指导你
授权成功回退上一个页面,然后在回退
你应该好好看一下.. wx.navigateTo 和wx.redirectTo 这两个方法 了解这两种方法的调用环境之后,你这个问题不是问题
也就是说...当你完成登录时.应该重定向..而不应该navigateBack 如果你想记录用户打开页面的历史,你可以存在wx.Storage里. 小程序很好玩的