hookehuyr

feat(auth): 实现静默授权并优化授权流程

重构授权处理逻辑,新增静默授权功能避免页面跳转
优化401错误处理,使用静默授权替代页面跳转
移除未加入家庭时的强制跳转逻辑
重构returnToOriginalPage函数,优化页面跳转逻辑
...@@ -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 },
......