فهرست منبع

小程序调试

skyline 2 ماه پیش
والد
کامیت
282d48deb1

+ 9 - 36
haha-miniapp/src/main/java/com/haha/miniapp/config/SaTokenConfig.java

@@ -15,8 +15,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 public class SaTokenConfig implements WebMvcConfigurer {
 
     /**
-     * 注册 Sa-Token 全局过滤器,用于读取小程序的 access_token
-     * 支持多种token传递方式,提高兼容性
+     * 注册 Sa-Token 全局过滤器
+     * Sa-Token 会根据配置自动从请求头读取 token
      */
     @Bean
     public SaServletFilter getSaServletFilter() {
@@ -24,47 +24,20 @@ public class SaTokenConfig implements WebMvcConfigurer {
             .addInclude("/**")
             .addExclude("/login/**", "/health/**", "/callback/**")
             .setAuth(obj -> {
-                // 多种方式获取token,提高兼容性
-                String tokenValue = null;
-                
-                // 方式1: 从 access_token 请求头获取(小程序标准方式)
-                tokenValue = SaHolder.getRequest().getHeader("access_token");
-                if (isValidToken(tokenValue)) {
-                    log.info("[Sa-Token] 从 access_token 头读取到token: {}", maskToken(tokenValue));
-                }
-                
-                // 方式2: 从 Authorization 头获取(标准Bearer方式)
-                if (!isValidToken(tokenValue)) {
-                    String authHeader = SaHolder.getRequest().getHeader("Authorization");
-                    if (authHeader != null && authHeader.startsWith("Bearer ")) {
-                        tokenValue = authHeader.substring(7);
-                        if (isValidToken(tokenValue)) {
-                            log.info("[Sa-Token] 从 Authorization 头读取到token: {}", maskToken(tokenValue));
-                        }
-                    }
-                }
-                
-                // 方式3: 从请求参数获取(备用方式)
-                if (!isValidToken(tokenValue)) {
-                    // 注意:SaRequest 可能不直接支持 getParameter,这里先注释掉
-                    // tokenValue = SaHolder.getRequest().getParameter("access_token");
-                    // if (isValidToken(tokenValue)) {
-                    //     log.info("[Sa-Token] 从请求参数读取到token: {}", maskToken(tokenValue));
-                    // }
-                }
-                
-                // 如果获取到有效token,设置到上下文
-                if (isValidToken(tokenValue)) {
-                    StpUtil.setTokenValue(tokenValue);
+                // Sa-Token 会根据配置自动从请求头读取 token
+                // 这里只需要执行登录校验即可
+                String tokenValue = StpUtil.getTokenValue();
+                if (tokenValue != null && !tokenValue.isEmpty()) {
+                    log.info("[Sa-Token Filter] 读取到token: {}", maskToken(tokenValue));
                 } else {
-                    log.info("[Sa-Token] 未找到有效的token");
+                    log.warn("[Sa-Token Filter] 未找到token");
                 }
                 
                 // 执行登录校验
                 StpUtil.checkLogin();
             })
             .setError(e -> {
-                log.warn("[Sa-Token] 认证失败: {}", e.getMessage());
+                log.warn("[Sa-Token Filter] 认证失败: {}", e.getMessage());
                 return e;
             });
     }

+ 6 - 0
haha-miniapp/src/main/resources/application.yml

@@ -113,6 +113,12 @@ sa-token:
   token-style: uuid
   # 是否输出操作日志
   is-log: true
+  # 是否在登录后的 WebSocket 连接中输出 token
+  is-read-cookie: false
+  # 是否在登录后的请求体里返回 token
+  is-read-body: false
+  # 是否从 header 中读取 token
+  is-read-header: true
 
 # 日志配置
 logging:

+ 8 - 0
haha-mp/src/pages/login/login.vue

@@ -120,10 +120,18 @@ const onGetPhoneNumber = async (e: any) => {
 */
 
 const handleLoginSuccess = (res: any) => {
+  console.log('[登录成功] 收到的响应数据:', res);
+  console.log('[登录成功] token:', res.token);
+  console.log('[登录成功] userInfo:', res.userInfo);
+  
   // 使用auth工具保存token和用户信息
   setToken(res.token);
   setUserInfo(res.userInfo);
   
+  // 验证保存是否成功
+  const savedToken = uni.getStorageSync('access_token');
+  console.log('[登录成功] 保存后验证 - token:', savedToken ? '已保存' : '保存失败');
+  
   uni.showToast({
     title: '登录成功',
     icon: 'success'

+ 8 - 1
haha-mp/src/utils/auth.ts

@@ -7,14 +7,21 @@
  * 获取本地存储的token
  */
 export const getToken = (): string => {
-  return uni.getStorageSync('access_token') || '';
+  const token = uni.getStorageSync('access_token');
+  console.log('[Auth] 获取token:', token ? '存在(长度:' + token.length + ')' : '不存在');
+  return token || '';
 };
 
 /**
  * 保存token到本地存储
  */
 export const setToken = (token: string): void => {
+  console.log('[Auth] 保存token:', token ? '有效(长度:' + token.length + ')' : '无效');
   uni.setStorageSync('access_token', token);
+  
+  // 验证保存是否成功
+  const saved = uni.getStorageSync('access_token');
+  console.log('[Auth] 保存后验证:', saved === token ? '成功' : '失败');
 };
 
 /**

+ 10 - 0
haha-mp/src/utils/request.ts

@@ -42,6 +42,13 @@ export const request = <T = any>(config: RequestConfig): Promise<T> => {
     const token = getToken();
     if (token) {
       header['access_token'] = token;
+      if (API_CONFIG.enableLog) {
+        console.log('[请求拦截] 添加token到请求头:', token.substring(0, 8) + '...');
+      }
+    } else {
+      if (API_CONFIG.enableLog) {
+        console.warn('[请求拦截] 未找到token,请求将不携带token');
+      }
     }
     
     // 添加Content-Type
@@ -83,6 +90,9 @@ export const request = <T = any>(config: RequestConfig): Promise<T> => {
         // 处理业务状态码
         if (responseData.code === 200 || responseData.code === 0) {
           // 成功
+          if (API_CONFIG.enableLog) {
+            console.log('[响应处理] 业务成功,返回data:', responseData.data);
+          }
           resolve(responseData.data as T);
         } else if (responseData.code === 401) {
           // 未登录或token过期