1
0
Переглянути джерело

微信小程序认证登录逻辑修改代码提交,以及管理后台权限控制

hyq 5 роки тому
батько
коміт
eaf8887bf9

+ 10 - 0
kmall-admin/src/main/java/com/kmall/admin/entity/ProductStoreRelaEntity.java

@@ -126,6 +126,16 @@ public class ProductStoreRelaEntity implements Serializable {
 
     private Integer hotSortNum;
 
+    private String isHot;
+
+    public String getIsHot() {
+        return isHot;
+    }
+
+    public void setIsHot(String isHot) {
+        this.isHot = isHot;
+    }
+
     public String getIsOnSale() {
         return isOnSale;
     }

+ 41 - 41
kmall-admin/src/main/resources/conf/fastdfs.properties

@@ -1,43 +1,7 @@
-##连接超时时间
-connect_timeout=30
-
-#网络超时时间
-network_timeout=60
-
-#文件路径
-base_path=/data/files/
-
-#tracker server是FastDFS文件系统的协调者,其主要作用是负载均衡和调度。
-#Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息
-tracker_server=192.168.1.251:22122
-
-log_level=info
-
-use_connection_pool = false
-
-connection_pool_max_idle_time = 3600
-
-load_fdfs_parameters_from_tracker=false
-
-use_storage_id = false
-
-storage_ids_filename = storage_ids.conf
-
-#HTTP 服务器地址
-http.tracket_nginx_addr=192.168.1.251
-
-#HTTP 服务器端口号
-http.tracker_server_port=80
-
-#文件作者
-file.author=kmall-pt
-
-##############生产环境################
-
 ###连接超时时间
-##connect_timeout=30
-##
-###网络超时时间
+#connect_timeout=30
+#
+##网络超时时间
 #network_timeout=60
 #
 ##文件路径
@@ -45,7 +9,7 @@ file.author=kmall-pt
 #
 ##tracker server是FastDFS文件系统的协调者,其主要作用是负载均衡和调度。
 ##Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息
-#tracker_server=120.76.26.84:22122
+#tracker_server=192.168.1.251:22122
 #
 #log_level=info
 #
@@ -60,10 +24,46 @@ file.author=kmall-pt
 #storage_ids_filename = storage_ids.conf
 #
 ##HTTP 服务器地址
-#http.tracket_nginx_addr=120.76.26.84
+#http.tracket_nginx_addr=192.168.1.251
 #
 ##HTTP 服务器端口号
 #http.tracker_server_port=80
 #
 ##文件作者
 #file.author=kmall-pt
+
+
+##############生产环境################
+##连接超时时间
+#connect_timeout=30
+#
+##网络超时时间
+network_timeout=60
+
+#文件路径
+base_path=/data/files/
+
+#tracker server是FastDFS文件系统的协调者,其主要作用是负载均衡和调度。
+#Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息
+tracker_server=120.76.26.84:22122
+
+log_level=info
+
+use_connection_pool = false
+
+connection_pool_max_idle_time = 3600
+
+load_fdfs_parameters_from_tracker=false
+
+use_storage_id = false
+
+storage_ids_filename = storage_ids.conf
+
+#HTTP 服务器地址
+http.tracket_nginx_addr=120.76.26.84
+
+#HTTP 服务器端口号
+http.tracker_server_port=80
+
+#文件作者
+file.author=kmall-pt

+ 1 - 0
kmall-admin/src/main/resources/mybatis/mapper/ProductStoreRelaDao.xml

@@ -153,6 +153,7 @@
         a.`market_price`,
         a.`stock_price`,
         a.`sell_volume`,
+        b.is_hot 'isHot',
         b.is_on_sale 'isOnSale',
         b.sell_volume 'goodsSellVolume',
         b.sku,a.goods_biz_type, a.creater_sn, a.create_time, a.moder_sn, a.mod_time, a.tstm,

+ 6 - 2
kmall-admin/src/main/webapp/js/shop/ad.js

@@ -30,8 +30,12 @@ $(function () {
             },
             {label: '操作', width: 90, align: 'center', sortable: false,
                 formatter: function (value, col, row) {
-                    return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
-                        "onclick='vm.copyAd(" + row.id + ")'>复制广告</button>";
+                    if(hasPermission('ad:saveCopyAd')) {
+                        return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+                            "onclick='vm.copyAd(" + row.id + ")'>复制广告</button>";
+                    }else{
+                        return '-';
+                    }
                 }
             }],
         viewrecords: true,

+ 12 - 2
kmall-admin/src/main/webapp/js/shop/brand.js

@@ -45,8 +45,12 @@ $(function () {
         },
             {label: '操作', width: 90, align: 'center', sortable: false,
                 formatter: function (value, col, row) {
-                    return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
-                        "onclick='vm.copyBrand(" + row.id + ")'>复制品牌</button>";
+                    if(hasPermission('brand:saveCopyBrand')) {
+                        return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+                            "onclick='vm.copyBrand(" + row.id + ")'>复制品牌</button>";
+                    }else {
+                        return '-'
+                    }
                 }
             }],
         viewrecords: true,
@@ -117,6 +121,7 @@ var vm = new Vue({
         copyBrandDto: {brandId: '', storeList:"", categoryList:""},
         showCopyList: true,
         showViewList: false,
+        stores: [],
     },
     methods: {
         copyBrand: function(id){
@@ -337,5 +342,10 @@ var vm = new Vue({
         handleReset: function (name) {
             handleResetForm(this, name);
         }
+    },
+    mounted() {
+        $.get("../store/queryAll", function (r) {
+            vm.stores = r.list;
+        });
     }
 });

+ 6 - 2
kmall-admin/src/main/webapp/js/shop/category.js

@@ -61,8 +61,12 @@ TreeGrid.initColumn = function () {
         },
         {title: '操作', width: '90px', align: 'center', valign: 'middle',
             formatter: function (item, index) {
-                return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
-                    "onclick='vm.copyCategory(" + item.id + ",\""+ item.level +"\")'>复制分类</button>";
+                if(hasPermission('category:saveCopyCategory')) {
+                    return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+                        "onclick='vm.copyCategory(" + item.id + ",\"" + item.level + "\")'>复制分类</button>";
+                }else {
+                    return '-'
+                }
             }
         }]
     return columns;

+ 6 - 2
kmall-admin/src/main/webapp/js/shop/freight.js

@@ -21,8 +21,12 @@ $(function () {
             },
             {label: '操作', width: 90, align: 'center', sortable: false,
                 formatter: function (value, col, row) {
-                    return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
-                        "onclick='vm.copyFreight(" + row.id + ")'>复制运费</button>";
+                    if(hasPermission('freight:saveCopyFreight')) {
+                        return "&nbsp;&nbsp;&nbsp;&nbsp;<button class='btn btn-primary' " +
+                            "onclick='vm.copyFreight(" + row.id + ")'>复制运费</button>";
+                    }else{
+                        return '-';
+                    }
                 }
             }],
         viewrecords: true,

+ 9 - 3
kmall-admin/src/main/webapp/js/shop/storeProductStock.js

@@ -7,7 +7,7 @@ $(function () {
             {label: 'ID', name: 'id', index: 'id', hidden: true, key: true},
             {label: '商品商户编号', name: 'goods_merch_sn', index: 'goods_merch_sn', hidden: true},
             {label: '所属商户', name: 'merchName', index: 'merchName', width: 70, align: 'center'},
-            {label: '所属门店', name: 'storeName', index: 'storeName', width: 80, align: 'center'},
+            {label: '所属门店', name: 'storeName', index: 'storeName', width: 70, align: 'center'},
             {label: '商品类型', name: 'categoryName', index: 'categoryName', width: 80, align: 'center'},
             {
                 label: '货品业务类型', name: 'goodsBizType', index: 'goods_biz_type', width: 70, align: 'center',
@@ -22,15 +22,21 @@ $(function () {
                     return '普通货物';
                 }
             },
-            {label: '商品编码', name: 'goodsSn', index: 'goodsSn', width: 80, align: 'center'},
+            {label: '商品编码', name: 'goodsSn', index: 'goodsSn', width: 70, align: 'center'},
             {label: '名称', name: 'goodsName', index: 'goodsName', width: 160, align: 'left'},
-            {label: '产品编码', name: 'productSn', index: 'productSn', width: 80, align: 'center'},
+            {label: '产品编码', name: 'productSn', index: 'productSn', width: 70, align: 'center'},
             {
                 label: '上架', name: 'isOnSale', index: 'is_on_sale', width: 40, align: 'center',
                 formatter: function (value) {
                     return transIsNot(value);
                 }
             },
+            {
+                label: '热销', name: 'isHot', index: 'isHot', width: 40, align: 'center',
+                formatter: function (value) {
+                    return transIsNot(value);
+                }
+            },
             {label: '库存是否共享', name: 'isStockShare', index: 'isStockShare', width: 70, align: 'center',
                 formatter: function (value) {
                     if (value == '0') {

+ 135 - 6
kmall-api/src/main/java/com/kmall/api/api/ApiAuthController.java

@@ -3,11 +3,14 @@ package com.kmall.api.api;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Maps;
 import com.kmall.api.annotation.IgnoreAuth;
+import com.kmall.api.cache.UserTokenCache;
 import com.kmall.api.entity.*;
 import com.kmall.api.service.*;
 import com.kmall.api.util.ApiBaseAction;
 import com.kmall.api.util.ApiUserUtils;
 import com.kmall.api.util.CommonUtil;
+import com.kmall.common.utils.ApiRRException;
+import com.kmall.common.utils.CharUtil;
 import com.qiniu.util.StringUtils;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.logging.Log;
@@ -16,6 +19,7 @@ import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.HashMap;
@@ -43,13 +47,16 @@ public class ApiAuthController extends ApiBaseAction {
     private ApiMerchUserService apiMerchUserService;
     @Autowired
     private ApiThirdMerchantBizService apiThirdMerchantBizService;
+    public static final String IS_REFUSED_LOGIN = "isRefusedLogin";
 
     /**
-     * 登录
+     * 授权登录保存用户信息,以及redis的token信息
      */
     @IgnoreAuth
     @PostMapping("login_by_weixin")
-    public Object loginByWeixin() {
+    public Object loginByWeixin(HttpServletRequest request) {
+        //从header中获取IS_REFUSED_LOGIN
+        String isRefusedLogin = request.getHeader(IS_REFUSED_LOGIN);
         Map<String, Object> resultObj = Maps.newHashMap();
         JSONObject jsonParam = this.getJsonRequest();
         FullUserInfo fullUserInfo = null;
@@ -108,7 +115,10 @@ public class ApiAuthController extends ApiBaseAction {
             userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
             userService.update(userVo);
         }
-        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(userVo.getWeixin_openid(), storeId,userVo.getId(),merchSn,"false");
+        if(userVo.getId()!=null){
+            isRefusedLogin = "false";
+        }
+        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(userVo.getWeixin_openid(), storeId,userVo.getId(),merchSn, isRefusedLogin);
         String token = MapUtils.getString(tokenMap, "token");
 
         if (null == userInfo || StringUtils.isNullOrEmpty(token)) {
@@ -120,6 +130,109 @@ public class ApiAuthController extends ApiBaseAction {
         resultObj.put("userId", userVo.getId());
         return toResponsSuccess(resultObj);
     }
+
+    /**
+     * 授权登录保存token到redis
+     * @param request
+     * @return
+     */
+    @IgnoreAuth
+    @PostMapping("loginSaveToken")
+    public Object loginSaveToken(HttpServletRequest request) {
+        //从header中获取IS_REFUSED_LOGIN
+        String isRefusedLogin = request.getHeader(IS_REFUSED_LOGIN);
+        Map<String, Object> resultObj = Maps.newHashMap();
+        JSONObject jsonParam = this.getJsonRequest();
+        Long storeId = jsonParam.getLong("storeId");
+        String merchSn = (String)jsonParam.get("merchSn");
+        UserInfo userInfo = null;
+        if (null != jsonParam.get("userInfo")) {
+            userInfo = jsonParam.getObject("userInfo", UserInfo.class);
+        }
+//        if(userInfo == null){
+//            return toResponsFail("登录失败");
+//        }
+        String code = "";
+        if (!StringUtils.isNullOrEmpty(jsonParam.getString("code"))) {
+            code = jsonParam.getString("code");
+        }
+        //获取openid
+        String requestUrl = ApiUserUtils.getWebAccess(code);//通过自定义工具类组合出小程序需要的登录凭证 code
+        logger.info("》》》组合token为:" + requestUrl);
+        JSONObject sessionData = CommonUtil.httpsRequest(requestUrl, "GET", null);
+        logger.info("》》》sessionData为:" + sessionData);
+
+        if (null == sessionData) {
+            return toResponsFail("登录失败");
+        }
+        String openId = sessionData.getString("openid");
+        if (StringUtils.isNullOrEmpty(openId)) {
+            return toResponsFail("登录失败");
+        }
+        UserVo userVo = userService.queryByOpenId(openId);
+        if (null == userVo) {
+            userVo = new UserVo();
+            userVo.setPassword(openId);
+            userVo.setRegister_time(new Date());
+            userVo.setRegister_ip(this.getClientIp());
+            userVo.setLast_login_ip(userVo.getRegister_ip());
+            userVo.setLast_login_time(userVo.getRegister_time());
+            userVo.setWeixin_openid(sessionData.getString("openid"));
+            if(userInfo != null){
+                userVo.setAvatar(userInfo.getAvatarUrl());
+                userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
+                userVo.setNickname(filterEmoji(userInfo.getNickName()));
+            }
+            userVo.setUser_level_id(1);
+            userService.save(userVo);
+
+        } else {
+            userVo.setLast_login_ip(this.getClientIp());
+            userVo.setLast_login_time(new Date());
+            if(userInfo != null){
+                userVo.setAvatar(userInfo.getAvatarUrl());
+                userVo.setGender(userInfo.getGender()); // //性别 0:未知、1:男、2:女
+                userVo.setNickname(filterEmoji(userInfo.getNickName()));
+            }
+            userService.update(userVo);
+        }
+        if(userVo.getId()!=null){
+            isRefusedLogin = "false";
+        }
+        Map<String, Object> tokenMap = tokenService.createAndUpdateToken(userVo.getWeixin_openid(), storeId,userVo.getId(),merchSn, isRefusedLogin);
+        String token = MapUtils.getString(tokenMap, "token");
+
+        if (StringUtils.isNullOrEmpty(token)) {
+            return toResponsFail("登录失败");
+        }
+
+        resultObj.put("token", token);
+        resultObj.put("userInfo", userInfo);
+        resultObj.put("userId", userVo.getId());
+        return toResponsSuccess(resultObj);
+    }
+
+    /**
+     * 校验当前token是否有效
+     * @param request
+     * @return
+     */
+    @IgnoreAuth
+    @PostMapping("checkToken")
+    public Object checkToken(HttpServletRequest request) {
+        Map<String, Object> resultObj = Maps.newHashMap();
+        JSONObject jsonParam = this.getJsonRequest();
+        String token = (String)jsonParam.get("token");
+        //查询token信息
+        TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
+        if ((tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis())) {
+            logger.info("已授权,且token不为空,根据token查询token信息为空,校验token失效");//生成一个token
+            throw new ApiRRException("token失效", 401);
+        }
+
+        resultObj.put("token", tokenEntity.getToken());
+        return toResponsSuccess(resultObj);
+    }
     /**
      * 将emoji表情替换成空串
      * @param source
@@ -134,11 +247,14 @@ public class ApiAuthController extends ApiBaseAction {
     }
 
     /**
-     * 根据经纬度选择门店
+     * 根据经纬度选择门店,审核成功删除
      */
     @GetMapping("nearbyLists")
     @IgnoreAuth
-    public Object nearbyLists(@RequestParam BigDecimal latitude, @RequestParam BigDecimal longitude, @RequestParam String storeId,@RequestParam String thirdPartyMerchCode) {
+    public Object nearbyLists(@RequestParam BigDecimal latitude, @RequestParam BigDecimal longitude, @RequestParam String storeId,
+                              @RequestParam String thirdPartyMerchCode, HttpServletRequest request) {
+        //从header中获取IS_REFUSED_LOGIN
+        String isRefusedLogin = request.getHeader(IS_REFUSED_LOGIN);
         Map param = Maps.newHashMap();
         if(org.apache.commons.lang3.StringUtils.isNotEmpty(storeId)){
             param.put("storeId", storeId);
@@ -149,8 +265,20 @@ public class ApiAuthController extends ApiBaseAction {
         param.put("latitude", latitude);
         param.put("longitude", longitude);
         List<StoreVo> storeVoList = apiStoreService.queryNearbyList(param);
+
+        if(org.apache.commons.lang3.StringUtils.isNotEmpty(storeId)){
+            if(storeVoList.size()==0){
+                Map param2 = Maps.newHashMap();
+                if(org.apache.commons.lang3.StringUtils.isNotEmpty(thirdPartyMerchCode)){
+                    param2.put("thirdPartyMerchCode", thirdPartyMerchCode);
+                }
+                param2.put("latitude", latitude);
+                param2.put("longitude", longitude);
+                storeVoList = apiStoreService.queryNearbyList(param2);
+            }
+        }
         if (null != storeVoList && storeVoList.size() > 0 && null != getOpenId()) {
-            tokenService.createAndUpdateToken(getOpenId(), storeVoList.get(0).getId(),getUserId(),storeVoList.get(0).getMerchSn(),"false");
+            tokenService.createAndUpdateToken(getOpenId(), storeVoList.get(0).getId(),getUserId(),storeVoList.get(0).getMerchSn(),isRefusedLogin);
         }
         return toResponsSuccess(storeVoList);
     }
@@ -191,6 +319,7 @@ public class ApiAuthController extends ApiBaseAction {
         Long storeId = jsonParam.getLong("storeId");
         String merchSn = (String)jsonParam.get("merchSn");
         String isRefusedLogin = (String)jsonParam.get("isRefusedLogin");
+        logger.info("选择门店参数:storeId:"+storeId +";merchSn:"+merchSn+";isRefusedLogin:"+isRefusedLogin);
         //
         Map<String, Object> resultObj = Maps.newHashMap();
         Map<String, Object> tokenMap = tokenService.createAndUpdateToken(openId, storeId, getUserId(), merchSn, isRefusedLogin);

+ 6 - 0
kmall-api/src/main/java/com/kmall/api/interceptor/AuthorizationInterceptor.java

@@ -5,6 +5,8 @@ import com.kmall.api.cache.UserTokenCache;
 import com.kmall.api.entity.TokenEntity;
 import com.kmall.common.utils.ApiRRException;
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@@ -25,6 +27,7 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
     public static final String LOGIN_USER_KEY = "LOGIN_USER_KEY";
     public static final String LOGIN_TOKEN_KEY = "X-Nideshop-Token";
     public static final String IS_REFUSED_LOGIN = "isRefusedLogin";
+    protected Log logger = LogFactory.getLog(AuthorizationInterceptor.class);
 
 
     @Override
@@ -54,16 +57,19 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
         //token为空
         if(isRefusedLogin != null && !isRefusedLogin.equalsIgnoreCase("")){
             if (StringUtils.isBlank(token) && !isRefusedLogin.equalsIgnoreCase("true")) {
+                logger.info("已授权,且token为空,请先登录");
                 throw new ApiRRException("请先登录", 401);
             }
 
             //查询token信息
             TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
             if ((tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis())&& !isRefusedLogin.equalsIgnoreCase("true")) {
+                logger.info("已授权,且token不为空,根据token查询token信息为空,token失效,请重新登录");
                 throw new ApiRRException("token失效,请重新登录", 401);
             }
 
             if (tokenEntity != null && tokenEntity.getExpireTime().getTime() > System.currentTimeMillis()) {
+                logger.info("已授权,且token不为空,根据token查询token信息userId:"+tokenEntity.getUserId());
                 //设置userId到request里,后续根据userId,获取用户信息
                 request.setAttribute(LOGIN_USER_KEY, tokenEntity.getUserId());
             }

+ 2 - 0
kmall-api/src/main/java/com/kmall/api/util/ApiBaseAction.java

@@ -182,8 +182,10 @@ public class ApiBaseAction {
      */
     public String getOpenId() {
         String token = request.getHeader(AuthorizationInterceptor.LOGIN_TOKEN_KEY);
+        logger.info("请求openId的token:"+token);
         //查询token信息
         TokenEntity tokenEntity = UserTokenCache.getUserInfoByToken(token);
+        logger.info("根据token获取token对象信息:"+tokenEntity);
         if (tokenEntity == null || tokenEntity.getExpireTime().getTime() < System.currentTimeMillis()) {
             return null;
         }

+ 2 - 1
kmall-api/src/main/resources/mybatis/mapper/ApiStoreMapper.xml

@@ -167,6 +167,7 @@
         third_party_merch_name
         from mall_store a
         WHERE 1=1  and is_valid = 0
+        and (select count(1) from mall_product_store_rela r left join mall_goods g on r.goods_id = g.id where store_id = a.id and stock_num!=0 and g.is_hot=1 AND g.goods_number > 0 AND g.is_delete != 1 AND g.is_on_sale = 1)>0
         <if test="province_name != null and province_name.trim() != ''">
             AND province_name = #{province_name}
         </if>
@@ -187,4 +188,4 @@
         limit 0, 10
     </select>
 
-</mapper>
+</mapper>

+ 2 - 0
wx-mall/config/api.js

@@ -153,4 +153,6 @@ module.exports = {
   registUser: NewApiRootUrl + 'user/registUser', //用户注册
   getOpenId: NewApiRootUrl + 'auth/getOpenId', //获取用户openId
   userLoginMobileUpdate: NewApiRootUrl + 'user/userLoginMobileUpdate', //更新用户手机信息
+  checkToken: NewApiRootUrl + 'auth/checkToken', //校验token是否失效
+  AuthLoginSaveToken: NewApiRootUrl + 'auth/loginSaveToken',//更新token
 }; 

+ 5 - 5
wx-mall/pages/catalog/catalog.js

@@ -93,11 +93,11 @@ Page({
       }
     } else {
       // console.log('拒绝授权:' + wx.getStorageSync('isRefusedLogin'))
-      if (wx.getStorageSync('isRefusedLogin') != 'true') {
-        wx.navigateTo({
-          url: '/pages/auth/btnAuth/btnAuth',
-        })
-      }
+      // if (wx.getStorageSync('isRefusedLogin') != 'true') {
+      //   wx.navigateTo({
+      //     url: '/pages/auth/btnAuth/btnAuth',
+      //   })
+      // }
     }
   },
   onHide: function () {

+ 71 - 4
wx-mall/pages/index/index.js

@@ -59,7 +59,7 @@ Page({
     }
     wx.getLocation({
       success: function(location) {
-        that.successLoadStore(location);
+        // that.successLoadStore(location);
       },
       fail: function() {
         wx.hideLoading();
@@ -108,7 +108,16 @@ Page({
     wx.setStorageSync("navUrl", "/pages/index/index");
     wx.setStorageSync("isLocationIndex", "false"); //购物车是否已跳转登录页,到首页重置字段为false未跳转
     if (!wx.getStorageSync('isRefusedLogin')) {
-      wx.setStorageSync('isRefusedLogin', 'true'); //拒绝授权
+      if (wx.getStorageSync('userInfo') && wx.getStorageSync('token')) {
+        console.log('缓存是否授权为空,用户已授权:' + wx.getStorageSync('isRefusedLogin'))
+        wx.setStorageSync('isRefusedLogin', 'false'); 
+      } else {
+        console.log('缓存是否授权为空,用户未授权:' + wx.getStorageSync('isRefusedLogin'))
+        wx.setStorageSync('isRefusedLogin', 'true'); //拒绝授权
+      }
+    } else {
+      console.log('授权不为空:' + wx.getStorageSync('isRefusedLogin'))
+      wx.setStorageSync('isRefusedLogin', 'false'); 
     }
     that.syncStore();
     // if (wx.getStorageSync('userInfo') && wx.getStorageSync('token')) {
@@ -263,11 +272,69 @@ Page({
           storeName: nlist[0].storeName,
           storeId: nlist[0].id
         })
-        that.chooseStore(nlist[0].id, nlist[0].merchSn);
+        
+        that.checkLoginTokenByUpd(nlist);
         wx.setStorageSync('storeVo', JSON.stringify(nlist[0]));
       }
     })
   },
+  /**
+   * 校验token是否失效,失效则更新新token
+   */
+  checkLoginTokenByUpd: function (nlist){
+    var that = this;
+    util.request(api.checkToken, {
+      token: wx.getStorageSync('token')
+    }, 'POST').then(function (res) {
+      if (res.data.errno == 401) {
+        console.log(res.data.errmsg)
+        wx.login({
+          success: function (loginRes) {
+            if (loginRes.code) {
+              //登录远程服务器
+              wx.request({
+                url: api.AuthLoginSaveToken,
+                data: {
+                  code: loginRes.code,
+                  userInfo: wx.getStorageSync('userInfo'),
+                  storeId: that.data.storeId,
+                  merchSn: nlist[0].merchSn
+                },
+                method: 'POST',
+                header: {
+                  'Content-Type': 'application/json'
+                },
+                success: function (wxRes) {
+                  // console.log(wxRes)
+                  if (wxRes.data.errno === 0) {
+                    //存储用户信息
+                    wx.setStorageSync('userInfo', wxRes.data.data.userInfo);
+                    wx.setStorageSync('token', wxRes.data.data.token);
+                    wx.setStorageSync('userId', wxRes.data.data.userId);
+                    wx.setStorageSync('isRefusedLogin', 'false');//允许授权
+                    console.log("登录成功");
+                    that.chooseStore(nlist[0].id, nlist[0].merchSn);
+                  }
+                },
+                fail: function (err) {
+                  console.log("failed");
+                }
+              });
+            } else {
+              console.log("failed");
+            }
+          },
+          fail: function (err) {
+            console.log("failed");
+          }
+        });
+      } else {
+        console.log('token未失效');
+        // console.log(res)
+        that.chooseStore(nlist[0].id, nlist[0].merchSn);
+      }
+    });
+  },
   // 更新门店Id
   chooseStore: function(storeId, merchSn) {
     let that = this;
@@ -275,7 +342,7 @@ Page({
       storeId: storeId,
       merchSn: merchSn,
       isRefusedLogin: wx.getStorageSync('isRefusedLogin')
-    }, 'POST').then(function(res) {
+    }, 'POST').then(function (res) {
       if (res.errno === 0) {
         wx.setStorageSync('storeId', storeId);
         wx.setStorageSync('merchSn', merchSn);

+ 3 - 1
wx-mall/utils/util.js

@@ -54,7 +54,9 @@ function formatNumber(n) {
  * 封封微信的的request
  */
 function request(url, data = {}, method = "GET") {
-  // console.log(url+';'+wx.getStorageSync('token'));
+  // if (url == 'https://mp.k1net.cn/api/auth/chooseStoreId' || url == 'https://mp.k1net.cn/api/auth/nearbyLists') {
+  //   console.log(url + '封封微信的的request,isRefusedLogin:' + wx.getStorageSync('isRefusedLogin') + ',token:' + wx.getStorageSync('token'));
+  // }
   return new Promise(function (resolve, reject) {
     wx.request({
       url: url,