From 86a0c62c22b793ebbbc67a5f2b01a9a4800640e2 Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期日, 31 七月 2022 13:06:58 +0800
Subject: [PATCH] 同一账号有效时间内只允许一人登录

---
 VueWebApi/Controllers/LoginController.cs |   56 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 44 insertions(+), 12 deletions(-)

diff --git a/VueWebApi/Controllers/LoginController.cs b/VueWebApi/Controllers/LoginController.cs
index 011d134..5d31614 100644
--- a/VueWebApi/Controllers/LoginController.cs
+++ b/VueWebApi/Controllers/LoginController.cs
@@ -50,11 +50,11 @@
                     //User loginUser = JsonConvert.DeserializeObject<User>(HttpContext.Current.Session["User"].ToString());
                     User loginUser = JsonConvert.DeserializeObject<User>(JsonConvert.SerializeObject(ms));
                     //濡傛灉redis鐧诲綍鐢ㄦ埛涓笉瀛樺湪褰撳墠鐢ㄦ埛
-                    if (redis.Get<User>("LoginUserID" + ms.userid, 0) == null)
+                    if (redis.Get<User>("LoginUserID" + ms.usertype + ms.userid, 0) == null)
                     {
                         //redis.Remove("LoginUserID" + ms.userid, 0);
                         //鍐欏叆redis(娉ㄦ剰锛歳edis绫婚噷闈㈢殑澶辨晥鏃堕棿蹇呴』鍦╧ey鍒涘缓瀹屾垚涔嬪悗鎵嶇敓鏁�)
-                        redis.Set<User>("LoginUserID" + ms.userid, ms, redis.secondsTimeOut, 0);
+                        redis.Set<User>("LoginUserID" + ms.usertype + ms.userid, ms, redis.secondsTimeOut, 0);
                         //鐧诲綍淇℃伅鍐欏叆session
                         HttpContext.Current.Session["User"] = JsonConvert.SerializeObject(ms);
                         //鍐欏叆鐧诲綍鎿嶄綔璁板綍
@@ -66,18 +66,18 @@
                     else //濡傛灉瀛樺湪
                     {
                         //鑾峰彇redis涓綋鍓嶇敤鎴蜂俊鎭�
-                        User r_loginUser = redis.Get<User>("LoginUserID" + ms.userid, 0);
+                        User r_loginUser = redis.Get<User>("LoginUserID" + ms.usertype + ms.userid, 0);
                         //濡傛灉session涓殑鐢ㄦ埛usercode鍜宺edis涓殑鐢ㄦ埛usercode鍖归厤
                         if (r_loginUser.usercode.Equals(loginUser.usercode))
                         {
                             mes.data = ms;
-                            mes.code = "300";
-                            mes.Message = "褰撳墠璐﹀彿宸茬櫥褰�!";
+                            mes.code = "302";
+                            mes.Message = "褰撳墠璐﹀彿宸茬櫥褰�,鏄惁寮哄埗涓嬬嚎!";
                         }
                         else
                         {
                             //閲嶇疆杩囨湡鏃堕棿(娉ㄦ剰锛歳edis绫婚噷闈㈢殑澶辨晥鏃堕棿蹇呴』鍦╧ey鍒涘缓瀹屾垚涔嬪悗鎵嶇敓鏁�)
-                            redis.Set<User>("LoginUserID" + loginUser.userid, loginUser, redis.secondsTimeOut, 0);
+                            redis.Set<User>("LoginUserID" + ms.usertype + loginUser.userid, loginUser, redis.secondsTimeOut, 0);
                             //鐧诲綍淇℃伅鍐欏叆session
                             HttpContext.Current.Session["User"] = JsonConvert.SerializeObject(ms);
                             //鍐欏叆鐧诲綍鎿嶄綔璁板綍
@@ -105,9 +105,41 @@
                 mes.code = "300";
                 mes.Message = e.Message;
             }
-           
+
             return mes.ResponseMess(mes);
         }
+
+        #region[寮哄埗涓嬬嚎鎺ュ彛]
+        /// <summary>
+        /// 寮哄埗涓嬬嚎鎺ュ彛
+        /// </summary>
+        /// <param name="userid">鐢ㄦ埛id</param>
+        /// <param name="usercode">鐢ㄦ埛缂栫爜</param>
+        /// <param name="username">鐢ㄦ埛鍚�</param>
+        /// <param name="usertype">鎿嶄綔绔疨C/APP</param>
+        /// <returns></returns>
+        [Route(template: "ForcedOffline")]
+        [HttpPost]
+        public HttpResponseMessage ForcedOffline(int userid, string usercode, string username, string usertype)
+        {
+            try
+            {
+                redis.Remove("LoginUserID"+usertype+ userid, 0); //鍒犻櫎redis
+                mes.code = "200";
+                mes.count = 0;
+                mes.Message = "寮哄埗涓嬬嚎鎴愬姛!";
+                mes.data = null;
+            }
+            catch (Exception e)
+            {
+                mes.code = "300";
+                mes.count = 0;
+                mes.Message = e.Message;
+                mes.data = null;
+            }
+            return mes.ResponseMess(mes);
+        }
+        #endregion
 
 
         #region[鏌ヨ鐧诲綍鑿滃崟]
@@ -142,11 +174,11 @@
         /// <param name="password">瀵嗙爜</param>
         /// <param name="newpassword">鏂板瘑鐮�</param>
         /// <returns></returns>
-        [ChannelActionFilter,Route(template: "UpdateUserPassword")]
+        [ChannelActionFilter, Route(template: "UpdateUserPassword")]
         [HttpPost]
-        public HttpResponseMessage UpdateUserPassword(string usercode, string username, string password,string newpassword)
+        public HttpResponseMessage UpdateUserPassword(string usercode, string username, string password, string newpassword)
         {
-            mes = LoginBLL.UpdateUserPassword(usercode,username, password,newpassword);
+            mes = LoginBLL.UpdateUserPassword(usercode, username, password, newpassword);
             return mes.ResponseMess(mes);
         }
         #endregion
@@ -162,9 +194,9 @@
         /// <returns></returns>
         [Route(template: "LoginOut")]
         [HttpPost]
-        public HttpResponseMessage LoginOut(int userid, string usercode, string username,string usertype)
+        public HttpResponseMessage LoginOut(int userid, string usercode, string username, string usertype)
         {
-            mes = LoginBLL.LoginOut(userid,usercode, username, usertype);
+            mes = LoginBLL.LoginOut(userid, usercode, username, usertype);
             return mes.ResponseMess(mes);
         }
         #endregion

--
Gitblit v1.9.3