追梦随想
追梦随想
  • 发布:2022-10-22 18:31
  • 更新:2022-10-24 12:07
  • 阅读:904

【报Bug】url 带 uniIdRedirectUrl 参数时使用 uni.redirectTo 无法正常跳转

分类:uni-app

产品分类: 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 均无法跳转

2022-10-22 18:31 负责人:DCloud_uniCloud_WYQ 分享
已邀请:
追梦随想

追梦随想 (作者)

大佬们,咱能否稳重一点啊...

1***@qq.com

1***@qq.com

新人报道

DCloud_uniCloud_WYQ

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

要回复问题请先登录注册