feat(auth): 实现静默授权并优化授权流程
重构授权处理逻辑,新增静默授权功能避免页面跳转 优化401错误处理,使用静默授权替代页面跳转 移除未加入家庭时的强制跳转逻辑 重构returnToOriginalPage函数,优化页面跳转逻辑
Showing
4 changed files
with
96 additions
and
78 deletions
| ... | @@ -336,10 +336,6 @@ useDidShow(async () => { | ... | @@ -336,10 +336,6 @@ useDidShow(async () => { |
| 336 | if (rankingCardRef.value) { | 336 | if (rankingCardRef.value) { |
| 337 | rankingCardRef.value.refreshData(); | 337 | rankingCardRef.value.refreshData(); |
| 338 | } | 338 | } |
| 339 | - } else { | ||
| 340 | - // 如果没有加入家庭(code为0),跳转到欢迎页面 | ||
| 341 | - Taro.redirectTo({ url: '/pages/Welcome/index' }); | ||
| 342 | - return; // 直接返回,不执行后续逻辑 | ||
| 343 | } | 339 | } |
| 344 | 340 | ||
| 345 | // TODO: 获取广告信息 | 341 | // TODO: 获取广告信息 | ... | ... |
| 1 | <!-- | 1 | <!-- |
| 2 | * @Date: 2022-09-19 14:11:06 | 2 | * @Date: 2022-09-19 14:11:06 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-09-07 01:37:03 | 4 | + * @LastEditTime: 2025-09-12 10:20:03 |
| 5 | * @FilePath: /lls_program/src/pages/auth/index.vue | 5 | * @FilePath: /lls_program/src/pages/auth/index.vue |
| 6 | * @Description: 文件描述 | 6 | * @Description: 文件描述 |
| 7 | --> | 7 | --> |
| ... | @@ -22,72 +22,13 @@ import request from '@/utils/request'; | ... | @@ -22,72 +22,13 @@ import request from '@/utils/request'; |
| 22 | <script> | 22 | <script> |
| 23 | import "./index.less"; | 23 | import "./index.less"; |
| 24 | import { getCurrentPageParam } from "@/utils/weapp"; | 24 | import { getCurrentPageParam } from "@/utils/weapp"; |
| 25 | -import { returnToOriginalPage } from "@/utils/authRedirect"; | 25 | +import { returnToOriginalPage, silentAuth } from '@/utils/authRedirect' |
| 26 | 26 | ||
| 27 | export default { | 27 | export default { |
| 28 | name: "authPage", | 28 | name: "authPage", |
| 29 | - mounted () { | 29 | + mounted() { |
| 30 | - // 授权登陆 | 30 | + // 页面加载时优先尝试静默授权 |
| 31 | - Taro.login({ | 31 | + this.performAuth(); |
| 32 | - success: function (res) { | ||
| 33 | - if (res.code) { | ||
| 34 | - //发起网络请求 | ||
| 35 | - Taro.showLoading({ | ||
| 36 | - title: '授权中', | ||
| 37 | - }) | ||
| 38 | - // 根据环境判断是否传递openid参数 | ||
| 39 | - const requestData = { | ||
| 40 | - code: res.code, | ||
| 41 | - }; | ||
| 42 | - | ||
| 43 | - // 测试环境下传递openid,正式环境不传递 | ||
| 44 | - if (process.env.NODE_ENV === 'development') { | ||
| 45 | - requestData.openid = 'h-008'; | ||
| 46 | - // requestData.openid = 'h-009'; | ||
| 47 | - // requestData.openid = 'h-010'; | ||
| 48 | - // requestData.openid = 'h-011'; | ||
| 49 | - // requestData.openid = 'h-012'; | ||
| 50 | - // requestData.openid = 'h-013'; | ||
| 51 | - // requestData.openid = 'oWbdFvkD5VtloC50wSNR9IWiU2q8'; | ||
| 52 | - // requestData.openid = 'oex8h5QZnZJto3ttvO6swSvylAQo'; | ||
| 53 | - } | ||
| 54 | - | ||
| 55 | - request.post('/srv/?a=openid', requestData) | ||
| 56 | - .then(res => { | ||
| 57 | - if (res.data.code) { | ||
| 58 | - var cookie = res.cookies[0]; | ||
| 59 | - if (cookie != null) { | ||
| 60 | - wx.setStorageSync("sessionid", res.cookies[0]);//服务器返回的 Set-Cookie,保存到本地 | ||
| 61 | - //TAG 小程序绑定cookie | ||
| 62 | - // 修改请求头 | ||
| 63 | - request.defaults.headers.cookie = res.cookies[0]; | ||
| 64 | - // if (res.data.data.avatar) { | ||
| 65 | - // Taro.reLaunch({ | ||
| 66 | - // url: '../../' + getCurrentPageParam().url | ||
| 67 | - // }) | ||
| 68 | - // } else { // 头像没有设置跳转完善信息页面 | ||
| 69 | - // Taro.redirectTo({ | ||
| 70 | - // url: '../apxUserInfo/index' | ||
| 71 | - // }) | ||
| 72 | - // } | ||
| 73 | - // TAG:处理分享跳转问题 - 使用新的重定向逻辑 | ||
| 74 | - returnToOriginalPage(); | ||
| 75 | - Taro.hideLoading(); | ||
| 76 | - } | ||
| 77 | - } else { | ||
| 78 | - console.warn(res.data.msg); | ||
| 79 | - Taro.hideLoading(); | ||
| 80 | - } | ||
| 81 | - }) | ||
| 82 | - .catch(err => { | ||
| 83 | - console.error(err); | ||
| 84 | - Taro.hideLoading(); | ||
| 85 | - }); | ||
| 86 | - } else { | ||
| 87 | - console.log('登录失败!' + res.errMsg) | ||
| 88 | - } | ||
| 89 | - } | ||
| 90 | - }) | ||
| 91 | }, | 32 | }, |
| 92 | data () { | 33 | data () { |
| 93 | return { | 34 | return { |
| ... | @@ -110,6 +51,77 @@ export default { | ... | @@ -110,6 +51,77 @@ export default { |
| 110 | // }) | 51 | // }) |
| 111 | }, | 52 | }, |
| 112 | methods: { | 53 | methods: { |
| 54 | + performAuth() { | ||
| 55 | + // 优先尝试静默授权 | ||
| 56 | + silentAuth().then(() => { | ||
| 57 | + // 静默授权成功,检查当前页面是否需要跳转 | ||
| 58 | + const pages = Taro.getCurrentPages(); | ||
| 59 | + const currentPage = pages[pages.length - 1]; | ||
| 60 | + const currentRoute = currentPage?.route; | ||
| 61 | + | ||
| 62 | + // 只有在auth页面时才需要跳转回原页面 | ||
| 63 | + if (currentRoute === 'pages/auth/index') { | ||
| 64 | + returnToOriginalPage(); | ||
| 65 | + } | ||
| 66 | + }).catch(() => { | ||
| 67 | + // 静默授权失败,执行手动授权 | ||
| 68 | + this.manualAuth(); | ||
| 69 | + }); | ||
| 70 | + }, | ||
| 71 | + manualAuth() { | ||
| 72 | + // 手动授权登陆 | ||
| 73 | + Taro.login({ | ||
| 74 | + success: function (res) { | ||
| 75 | + if (res.code) { | ||
| 76 | + //发起网络请求 | ||
| 77 | + Taro.showLoading({ | ||
| 78 | + title: '授权中', | ||
| 79 | + }) | ||
| 80 | + // 根据环境判断是否传递openid参数 | ||
| 81 | + const requestData = { | ||
| 82 | + code: res.code, | ||
| 83 | + }; | ||
| 84 | + | ||
| 85 | + // 测试环境下传递openid,正式环境不传递 | ||
| 86 | + if (process.env.NODE_ENV === 'development') { | ||
| 87 | + // requestData.openid = 'h-008'; | ||
| 88 | + // requestData.openid = 'h-009'; | ||
| 89 | + // requestData.openid = 'h-010'; | ||
| 90 | + // requestData.openid = 'h-011'; | ||
| 91 | + // requestData.openid = 'h-012'; | ||
| 92 | + // requestData.openid = 'h-013'; | ||
| 93 | + // requestData.openid = 'oWbdFvkD5VtloC50wSNR9IWiU2q8'; | ||
| 94 | + requestData.openid = 'oex8h5QZnZJto3ttvO6swSvylAQo'; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + request.post('/srv/?a=openid', requestData) | ||
| 98 | + .then(res => { | ||
| 99 | + if (res.data.code) { | ||
| 100 | + var cookie = res.cookies[0]; | ||
| 101 | + if (cookie != null) { | ||
| 102 | + wx.setStorageSync("sessionid", res.cookies[0]);//服务器返回的 Set-Cookie,保存到本地 | ||
| 103 | + //TAG 小程序绑定cookie | ||
| 104 | + // 修改请求头 | ||
| 105 | + request.defaults.headers.cookie = res.cookies[0]; | ||
| 106 | + // TAG:处理分享跳转问题 - 使用新的重定向逻辑 | ||
| 107 | + returnToOriginalPage(); | ||
| 108 | + Taro.hideLoading(); | ||
| 109 | + } | ||
| 110 | + } else { | ||
| 111 | + console.warn(res.data.msg); | ||
| 112 | + Taro.hideLoading(); | ||
| 113 | + } | ||
| 114 | + }) | ||
| 115 | + .catch(err => { | ||
| 116 | + console.error(err); | ||
| 117 | + Taro.hideLoading(); | ||
| 118 | + }); | ||
| 119 | + } else { | ||
| 120 | + console.log('登录失败!' + res.errMsg) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + }) | ||
| 124 | + }, | ||
| 113 | bindGetUserInfo (e) { | 125 | bindGetUserInfo (e) { |
| 114 | console.warn(e.detail.userInfo) | 126 | console.warn(e.detail.userInfo) |
| 115 | }, | 127 | }, | ... | ... |
This diff is collapsed. Click to expand it.
| 1 | /* | 1 | /* |
| 2 | * @Date: 2022-09-19 14:11:06 | 2 | * @Date: 2022-09-19 14:11:06 |
| 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com | 3 | * @LastEditors: hookehuyr hookehuyr@gmail.com |
| 4 | - * @LastEditTime: 2025-09-04 15:33:42 | 4 | + * @LastEditTime: 2025-09-12 10:44:34 |
| 5 | * @FilePath: /lls_program/src/utils/request.js | 5 | * @FilePath: /lls_program/src/utils/request.js |
| 6 | * @Description: 简单axios封装,后续按实际处理 | 6 | * @Description: 简单axios封装,后续按实际处理 |
| 7 | */ | 7 | */ |
| 8 | // import axios from 'axios' | 8 | // import axios from 'axios' |
| 9 | import axios from 'axios-miniprogram'; | 9 | import axios from 'axios-miniprogram'; |
| 10 | // // import qs from 'Qs' | 10 | // // import qs from 'Qs' |
| 11 | -import { navigateToAuth } from '@/utils/authRedirect' | 11 | +import { silentAuth } from '@/utils/authRedirect' |
| 12 | 12 | ||
| 13 | // import { ProgressStart, ProgressEnd } from '@/components/axios-progress/progress'; | 13 | // import { ProgressStart, ProgressEnd } from '@/components/axios-progress/progress'; |
| 14 | // import store from '@/store' | 14 | // import store from '@/store' |
| ... | @@ -147,18 +147,28 @@ service.interceptors.response.use( | ... | @@ -147,18 +147,28 @@ service.interceptors.response.use( |
| 147 | 147 | ||
| 148 | /** | 148 | /** |
| 149 | * 处理401未授权状态 | 149 | * 处理401未授权状态 |
| 150 | - * 清除本地sessionid并跳转到登录页 | 150 | + * 清除本地sessionid并使用静默授权 |
| 151 | */ | 151 | */ |
| 152 | if (response.data.code === 401) { | 152 | if (response.data.code === 401) { |
| 153 | // 清除无效的sessionid | 153 | // 清除无效的sessionid |
| 154 | clearSessionId(); | 154 | clearSessionId(); |
| 155 | - /** | 155 | + |
| 156 | - * 未授权跳转登录页 | 156 | + // 使用静默授权处理,避免页面跳转 |
| 157 | - * 授权完成后 返回当前页面 | 157 | + return silentAuth( |
| 158 | - */ | 158 | + () => { |
| 159 | - setTimeout(() => { | 159 | + // 授权成功后重新发起原始请求 |
| 160 | - navigateToAuth(); | 160 | + const originalRequest = response.config; |
| 161 | - }, 1000); | 161 | + return service.request(originalRequest); |
| 162 | + }, | ||
| 163 | + (error) => { | ||
| 164 | + // 静默授权失败,直接返回错误,不跳转页面 | ||
| 165 | + console.error('静默授权失败:', error); | ||
| 166 | + return Promise.reject(new Error('授权失败,请稍后重试')); | ||
| 167 | + } | ||
| 168 | + ).catch(() => { | ||
| 169 | + // 如果静默授权完全失败,直接返回错误,不跳转页面 | ||
| 170 | + return Promise.reject(new Error('授权失败,请稍后重试')); | ||
| 171 | + }); | ||
| 162 | } | 172 | } |
| 163 | return response | 173 | return response |
| 164 | }, | 174 | }, | ... | ... |
-
Please register or login to post a comment