这个问题也困扰了我好久,苦于查找大量文章没看到什么方案,部分说自动退出的,但当时的代码怎么写都没法自动退出。后来苦苦挣扎也就解决了,说下实现前和实现后的代码吧。
实现前
用户访问x页面,你可能在根页面里调了个接口,然后根据接口返回的不同去对应处理。
getOpenid().then(res => {
// 表明已授权,正常处理你的前端逻辑
if(res.code === 200){
//比如调微信的sdk
}else if(res.code == 201) {
//未授权,前端重定向到授权页
location.replace(res.data.authUrl);
}
})
前端跳授权页的这种实现,目前测试是实现不了用户拒绝授权个人信息就自动退出页面的
实现后
路由采用的history模式,用户访问H5的链接直接让后端处理,也就是绕过前端,直接被后端当成接口处理去授权,如果用户同意授权了就重定向到你前端该显示的页面,拒绝就自动退出了(点拒绝微信那边也没给回调,确实坑)。
具体方案我这边以改路由为主,比如客户访问/client/a页面,这时你需要将这页面发起访问的请求被后端拦截当成接口处理,让后端去处理授权对应逻辑。比如我这边的接口都是以/api为base,故要将用户访问的路由修改成/api/client/a,后端判断有没授权,有授权则重定向到/client/a,没有则跳授权页
routes: [
{ // 后端重定向的真实页
path: '/client/a',
name: 'a',
component: A
}
]
当然这种方案在ios端可行,在安卓端点拒绝是停留在空白页,无自动退出。但大家都这么做,所以就这样ok了~