如上
- 发布:2022-10-22 18:31
- 更新:2022-10-24 12:07
- 阅读:1163
产品分类: uniapp/H5
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win7
HBuilderX类型: 正式
HBuilderX版本号: 3.6.4
浏览器平台: Chrome
浏览器版本: 92.0.4515.131(正式版本) (64 位)
项目创建方式: HBuilderX
操作步骤:
预期结果:
正常跳转
正常跳转
实际结果:
无法跳转
无法跳转
bug描述:
pages页面增加uniIdRouter自动路由
"uniIdRouter": {
"loginPage": "pages/user/passport/check",
"needLogin": [
"pages/home/sign/sign"
]
}
页面跳转代码
<navigator class="item" url="../sign/sign"></navigator>
当用户未登录时,打开签到页面会自动跳转到登陆页面,并携带参数 uniIdRedirectUrl=..%2Fsign%2Fsign
那么问题来了,这根本不是一个绝对路径,用户登录后根本无法返回这个页面
测试1:把页面地址更换为绝对路径
http://localhost:8085/#/pages/user/passport/check?uniIdRedirectUrl=pages%252Fhome%252Fsign%252Fsign
测试2:在pages前面加上/
http://localhost:8085/#/pages/user/passport/check?uniIdRedirectUrl=%252Fpages%252Fhome%252Fsign%252Fsign
测试3:在pages前面加上../
http://localhost:8085/#/pages/user/passport/check?uniIdRedirectUrl=..%252Fpages%252Fhome%252Fsign%252Fsign
以上三种方法使用 uni.redirectTo 均无法跳转
3 个回复
追梦随想 (作者)
大佬们,咱能否稳重一点啊...
1***@qq.com
新人报道
DCloud_uniCloud_WYQ
问题就是用uni.redirectTo和uni.navigateTo时用相对路径跳转需要登录的页面时uniIdRedirectUrl参数错误的问题是吧,后半段的三个示例说的是别的问题吗?如果是指登录后跳转正确的uniIdRedirectUrl也跳转不过去的话,需要检查下是不是存储token使用的是异步操作,换句话说,是不是跳转的时候token还没有保存成功
追梦随想 (作者)
跟token没关系,直接在页面上放个按钮测下就知道了,点击按钮直接执行跳转都不行,理论上没问题才对,uniIdRedirectUrl 的值和正常跳转没啥区别,但实际上为啥不能跳转我也好奇
2022-10-25 01:06
DCloud_uniCloud_WYQ
回复 追梦随想: 跟token是有关系的,登录页面只有成功保存了token之后才能跳转到其他需要登录的页面,否则跳过去还会因为没有登录跳回来。
2022-10-25 11:51
追梦随想 (作者)
回复 DCloud_uniCloud_WYQ: 我为什么一定要保存token呢,为了测试根本就没有登录,直接在点击事件里面执行跳转,你自己测下吧
2022-10-25 13:23
DCloud_uniCloud_WYQ
回复 追梦随想: 你发的第一个问题确实是Bug,第二个可能是你没太理解,uniIdRouter判断是不是已经登录就是通过token来判断的,而你配置了"pages/home/sign/sign" 是需要登录才能跳转的。你从登录页面跳转"pages/home/sign/sign" 页面时uniIdRouter判断你没有token所以仍需回到登录页面,因此不会让你跳转
2022-10-25 13:27
追梦随想 (作者)
回复 DCloud_uniCloud_WYQ: 原来如此,测试了确实是这样,换一个不需要登录的页面就可以了,我说值明明是一样的咋就不行了呢,感谢解答。像这种情况如果在开发环境的控制台有个提示最好不过,不然谁遇到都会懵逼啊
2022-10-25 17:19
追梦随想 (作者)
回复 DCloud_uniCloud_WYQ: 不对不对,还有问题,验证token是否存在不应该是跳转的时候判断目标页面吗?但实际上只要参数带了需要登录的页面,都无法跳转,不应该验证参数吧,比如我要跳转到 /pages/user/passport/login?mobile=13000000000&uniIdRedirectUrl=/pages/home/sign/sign,login页面不需要登录,但根本无法跳转,因为验证了参数里面的页面,这是错误的,应该只验证login页面是否需要登录
2022-10-25 19:45
DCloud_uniCloud_WYQ
回复 追梦随想: 这个参数是你自己拼接的吗?/pages/home/sign/sign部分没有encode
2022-10-25 21:15
追梦随想 (作者)
回复 DCloud_uniCloud_WYQ: 刚开始是获取的参数拼接起来,发现不能跳转,后面就直接用字符串写死,也是不能跳转
2022-10-25 21:20
DCloud_uniCloud_WYQ
回复 追梦随想: 我测了没发现你说的这个问题,如果确认“/pages/user/passport/login”页面也是不需要登录的可以整理个demo发我试试
2022-10-26 11:14
追梦随想 (作者)
回复 DCloud_uniCloud_WYQ: 找到原因了,从url获取的参数似乎默认已经解码了,页面跳转的时候需要重新encodeURIComponent,这样就没问题,这不知道是文档错了还是算一个小bug,按文档的说法是在onLoad里对参数进行decodeURIComponent,我没有解码,以为可以直接用
2022-10-26 17:20