Browse Source

1. 微信小程序重新编译后登录状态会消失解决:
修复了 mallApp/src/store/modules/login.js,做了两件事:
- state.loginInfo 初始化时从本地缓存读取(uni.getStorageSync)。
- setLoginInfo 时同步写入缓存;当传入空对象时移除缓存,避免脏数据残留。
这样登录后即使重新编译刷新,loginInfo 也会恢复,recent.vue 的登录态判断会保持正确

2. mallApp 里 token 和 loginInfo 的缓存 key 现在都走同一套命名与常量

shizhongqi 4 months ago
parent
commit
c603a6e2fb

+ 13 - 2
mallApp/src/App.vue

@@ -3,11 +3,22 @@ import { mapMutations, mapActions, mapGetters } from "vuex";
 // 这个导入在小程序环境中是不需要的,因为小程序环境已经有全局的 setTimeout 函数
 // import { setTimeout } from "timers";
 import { getUser, wxLoginFn } from "@/utils/auth";
+import {
+  TOKEN_STORAGE_KEY,
+  LEGACY_TOKEN_STORAGE_KEY,
+} from "@/constant/storageKeys";
 export default {
   // 全端,数据共享,还可以解决页面初始化模板访问不到值得问题
   // 有坑 分包里的页面访问不到
   globalData: {},
   onLaunch () {
+    const legacyToken = uni.getStorageSync(LEGACY_TOKEN_STORAGE_KEY);
+    const currentToken = uni.getStorageSync(TOKEN_STORAGE_KEY);
+    if (!currentToken && legacyToken) {
+      uni.setStorageSync(TOKEN_STORAGE_KEY, legacyToken);
+      uni.removeStorageSync(LEGACY_TOKEN_STORAGE_KEY);
+    }
+
     // this.getAllOptions()
     // 删除缓存
     if (process.env.NODE_ENV == "production") {
@@ -24,7 +35,7 @@ export default {
     // H5开发环境无法微信授权,使用固定的用户 shish 2020.4.30
     if (process.env.NODE_ENV == "development") {
       uni.setStorageSync(
-        "token",
+        TOKEN_STORAGE_KEY,
         "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjBfMTI1NDM0MzEifQ.eyJpc3MiOiJodHRwczpcL1wvYXBpLm1hbGwuaHVhbWwuY29tIiwiYXVkIjoiaHR0cHM6XC9cL2FwaS5tYWxsLmh1YW1sLmNvbSIsImp0aSI6IjBfMTI1NDM0MzEiLCJpYXQiOjE1ODgyMzAwMjgsIm5iZiI6MTU4ODIzMDAyOCwiZXhwIjoxNTk2ODcwMDI4LCJ1bmlxdWVJZCI6IjEyNTQzNDMxIiwic291cmNlSWQiOjB9.Tmw2h9pucpyctvtB--i0dg-zTcVMIJZ1PtnWTLLwEEo"
       );
       uni.setStorageSync("account", "12358");
@@ -37,7 +48,7 @@ export default {
   },
   methods: {
     isLogin () {
-      let token = uni.getStorageSync("token");
+      let token = uni.getStorageSync(TOKEN_STORAGE_KEY);
       if (!token) {
         uni.reLaunch({
           url: "/pages/page/login/index"

+ 2 - 1
mallApp/src/components/wangCg.vue

@@ -44,6 +44,7 @@
 import { getWxPhone } from "@/api/mini"
 import { create } from "@/api/user"
 import store from '@/store'
+import { TOKEN_STORAGE_KEY } from "@/constant/storageKeys";
 
 export default {
   props: {
@@ -89,7 +90,7 @@ export default {
       let that = this
       create({miniOpenId: currentMiniOpenId, ...this.form}).then(res => {
         if(res.code == 1){
-          uni.setStorageSync('token', res.data.token)
+          uni.setStorageSync(TOKEN_STORAGE_KEY, res.data.token)
           if(res.data.user && !that.$util.isEmpty(res.data.user)){
             store.commit('setLoginInfo', res.data.user)
             that.$msg('登录成功')

+ 5 - 0
mallApp/src/constant/storageKeys.js

@@ -0,0 +1,5 @@
+export const TOKEN_STORAGE_KEY = "mallToken";
+export const LOGIN_INFO_STORAGE_KEY = "mallLoginInfo";
+
+// 兼容历史版本,启动时可迁移
+export const LEGACY_TOKEN_STORAGE_KEY = "token";

+ 3 - 2
mallApp/src/mixins/globalMixins.js

@@ -1,6 +1,7 @@
 import { pageTo, isLogin } from '@/utils/util.js'
 import { wxLoginFn } from '@/utils/auth'
 import { mapGetters } from 'vuex'
+import { TOKEN_STORAGE_KEY } from '@/constant/storageKeys'
 export default {
 	data() {
 		return {
@@ -20,7 +21,7 @@ export default {
 		let that = this
 		this.option = option || null
 		if (option.token) {
-			uni.setStorageSync('token', option.token)
+			uni.setStorageSync(TOKEN_STORAGE_KEY, option.token)
 		}
 
 		//扫客户注册码、客户充值码
@@ -66,7 +67,7 @@ export default {
 					console.log('checkSession success')
 				},
 				fail() {
-					uni.removeStorageSync('token');
+					uni.removeStorageSync(TOKEN_STORAGE_KEY);
 				}
 			})
 		}

+ 2 - 1
mallApp/src/pages/home/recent.vue

@@ -200,6 +200,7 @@ import { currentInfo } from "@/api/user";
 import { list } from "@/mixins";
 import { APIHOST } from "@/config";
 import { unReadMsgCount } from "@/api/chat";
+import { TOKEN_STORAGE_KEY } from "@/constant/storageKeys";
 export default {
   name: "recent",
   components: {
@@ -417,7 +418,7 @@ export default {
       }
     },
     updateUserAvatar(avatarUrl) {
-      let token = uni.getStorageSync("token") || "";
+      let token = uni.getStorageSync(TOKEN_STORAGE_KEY) || "";
       let url = APIHOST + "/upload/save-file?actType=saveAvatar";
       uni.uploadFile({
         url: url,

+ 4 - 7
mallApp/src/pages/login/account.vue

@@ -5,15 +5,11 @@
         <view class="module-com input-line-wrap">
           <tui-list-cell class="line-cell" :hover="false">
             <view class="tui-title" style="width:120upx;">账号</view>
-
-                <input type="number" v-model="form.mobile" placeholder-class="phcolor" placeholder-style="color:#ccc" class="tui-input" name="mobile" placeholder="请填写账号" />
-
+              <input type="number" v-model="form.mobile" placeholder-class="phcolor" placeholder-style="color:#ccc" class="tui-input" name="mobile" placeholder="请填写账号" />
           </tui-list-cell>
           <tui-list-cell class="line-cell" :hover="false">
             <view class="tui-title" style="width:120upx;">密码</view>
-
-                <input type="password" v-model="form.password" placeholder-class="phcolor" placeholder-style="color:#ccc" class="tui-input" name="password" placeholder="请填写密码" />
-
+              <input type="password" v-model="form.password" placeholder-class="phcolor" placeholder-style="color:#ccc" class="tui-input" name="password" placeholder="请填写密码" />
           </tui-list-cell>
           <view class="btn-wrap">
             <button class="admin-button-com blue big" style="border:none;" formType="submit">登录</button>
@@ -28,6 +24,7 @@ import TuiListCell from "@/components/plugin/list-cell"
 const form = require("@/utils/formValidation.js")
 import { accountLogin } from "@/api/user"
 import store from '@/store'
+import { TOKEN_STORAGE_KEY } from "@/constant/storageKeys";
 export default {
   name: "account",
   components: {
@@ -54,7 +51,7 @@ export default {
       let that = this
       accountLogin({...this.form}).then(res => {
         if(res.code == 1){
-          uni.setStorageSync('token', res.data.token)
+          uni.setStorageSync(TOKEN_STORAGE_KEY, res.data.token)
           if(res.data.user && !that.$util.isEmpty(res.data.user)){
             store.commit('setLoginInfo', res.data.user)
             uni.navigateBack()

+ 2 - 1
mallApp/src/pages/login/index.vue

@@ -26,6 +26,7 @@ const form = require("@/utils/formValidation.js")
 import { getWxInfo, getWxPhone } from "@/api/mini"
 import { create } from "@/api/user"
 import store from '@/store'
+import { TOKEN_STORAGE_KEY } from "@/constant/storageKeys";
 export default {
   name: "index",
   components: {
@@ -56,7 +57,7 @@ export default {
       let that = this
       create({miniOpenId:currentMiniOpenId,...this.form}).then(res => {
         if(res.code == 1){
-          uni.setStorageSync('token', res.data.token)
+          uni.setStorageSync(TOKEN_STORAGE_KEY, res.data.token)
           if(res.data.user && !that.$util.isEmpty(res.data.user)){
             store.commit('setLoginInfo', res.data.user)
             if(this.needBack == 1){

+ 3 - 2
mallApp/src/plugins/luch-request_0.0.7/request.js

@@ -8,6 +8,7 @@
  * **/
 import qs from 'qs'
 import constant from '@/constant/index'
+import { TOKEN_STORAGE_KEY } from '@/constant/storageKeys'
 // import common from '@/utils/common'
 import { parse } from '@/utils/util'
 import store from '@/store'
@@ -58,7 +59,7 @@ class Request {
 	requestBeforeFun(config, cancel) {
 		let token = ''
 		try {
-			const st = uni.getStorageSync('token')
+			const st = uni.getStorageSync(TOKEN_STORAGE_KEY)
 			if (st) {
 				token = st
 			}
@@ -126,7 +127,7 @@ class Request {
 	 * @param {string} currentRoute 当前页面路由
 	 */
 	handleAuthExpired(currentRoute) {
-		uni.removeStorageSync('token')
+		uni.removeStorageSync(TOKEN_STORAGE_KEY)
 		store.commit('setLoginInfo', {})
 		uni.showToast({
 			title: '加载中...',

+ 25 - 2
mallApp/src/store/modules/login.js

@@ -1,6 +1,23 @@
+import { LOGIN_INFO_STORAGE_KEY } from "@/constant/storageKeys";
+
+function getLocalLoginInfo() {
+	try {
+		const localLoginInfo = uni.getStorageSync(LOGIN_INFO_STORAGE_KEY)
+		if (!localLoginInfo) {
+			return {}
+		}
+		if (typeof localLoginInfo === 'string') {
+			return JSON.parse(localLoginInfo)
+		}
+		return localLoginInfo
+	} catch (e) {
+		return {}
+	}
+}
+
 export default {
 	state: {
-		loginInfo: {}
+		loginInfo: getLocalLoginInfo()
 	},
 	getters: {
 		getLoginInfo(state) {
@@ -12,7 +29,13 @@ export default {
 	},
 	mutations: {
 		setLoginInfo(state, payload) {
-			state.loginInfo = payload
+			const loginInfo = payload || {}
+			state.loginInfo = loginInfo
+			if (Object.keys(loginInfo).length) {
+				uni.setStorageSync(LOGIN_INFO_STORAGE_KEY, JSON.stringify(loginInfo))
+			} else {
+				uni.removeStorageSync(LOGIN_INFO_STORAGE_KEY)
+			}
 		},
 		setDictionariesInfo(state, payload) {
 			state.dictionariesInfo = payload

+ 3 - 2
mallApp/src/utils/auth.js

@@ -2,6 +2,7 @@ import store from '@/store'
 import UTIL from '@/utils/util'
 import { getStaffApi, getUserApi } from '@/api/common'
 import { postWxCode,getDictionaries } from '@/api/mini'
+import { TOKEN_STORAGE_KEY } from '@/constant/storageKeys'
 
 //获取商城端用户信息
 export async function getShopUser(update) {
@@ -21,7 +22,7 @@ export async function getUser(update) {
 		userInfo = res.data
 		store.dispatch('setUser', userInfo)
 	}).catch(() => {
-		uni.removeStorageSync('token')
+		uni.removeStorageSync(TOKEN_STORAGE_KEY)
 	})
 
 	return userInfo
@@ -70,7 +71,7 @@ export async function wxLoginFn(update) {
 	await postWxCode({ code: getObj.code }).then(subRes => {
 		if(subRes.code && subRes.code == 1){
 
-			uni.setStorageSync('token', subRes.data.token)
+			uni.setStorageSync(TOKEN_STORAGE_KEY, subRes.data.token)
 			uni.setStorageSync('miniOpenId', subRes.data.miniOpenId)
 
 			if(subRes.data.user && !UTIL.isEmpty(subRes.data.user)){

+ 3 - 2
mallApp/src/utils/util.js

@@ -1,6 +1,7 @@
 import CONSTANT from '@/constant'
 import { mobileReg } from '@/utils/tools/validate'
 import { getMiniAppUrl, isWxBrowser } from '@/utils/common'
+import { TOKEN_STORAGE_KEY } from '@/constant/storageKeys'
 // 是否为空
 const isEmpty = (val) => {
 	if (val instanceof Array) {
@@ -98,7 +99,7 @@ const checkName = (str) => {
  */
 export async function getCheckLogin() {
 	let status = false
-	let token = uni.getStorageSync('token')
+	let token = uni.getStorageSync(TOKEN_STORAGE_KEY)
 	if (token) {
 		status = true
 	} else {
@@ -251,7 +252,7 @@ export const pageTo = (item) => {
  * 是否登录
  */
 export const isLogin = () => {
-	let token = uni.getStorageSync('token')
+	let token = uni.getStorageSync(TOKEN_STORAGE_KEY)
 	if (token) {
 		return true
 	}