/// <summary> /// /// </summary> /// <param name="userId"></param> /// <param name="passportId"></param> /// <returns></returns> protected ResponseData AuthorizeLogin(int userId, string passportId) { UserToken userToken = new UserToken() { Token = GenrateToken(), UserId = userId, PassportId = passportId, ExpireTime = DateTime.Now.AddDays(1) }; HandlerManager.SaveToken(userToken.Token, userToken); return new LoginToken() { Token = userToken.Token, UserId = userToken.UserId, PassportId = userToken.PassportId }; }
/// <summary> /// /// </summary> /// <param name="key"></param> /// <param name="userToken"></param> public static void SaveToken(string key, UserToken userToken) { string userKey = string.Format("{0}:{1}", AccountServerToken, userToken.UserId); string redisKey = string.Format("{0}@{1}", AccountServerToken, key); if (!string.IsNullOrEmpty(RedisHost) && RedisConnected) { try { string script = @" local redisKey = KEYS[1] local userKey = KEYS[2] local key = KEYS[3] local timeout = ARGV[1] local val = ARGV[2] local oldToken = redis.call('Get', userKey) if oldToken and oldToken ~= nil then local k = '__AccountToken@'..oldToken redis.call('del', k) end redis.call('Set', redisKey, val, 'EX', timeout) redis.call('Set', userKey, key, 'EX', timeout) return 0 "; //use redis cache. RedisConnectionPool.Process(client => { int timeout = (int)(userToken.ExpireTime - DateTime.Now).TotalSeconds; client.ExecLuaAsInt(script, new[] { redisKey, userKey, key }, new[] { timeout.ToString(), MathUtils.ToJson(userToken) }); }); } catch (Exception ex) { TraceLog.WriteError("Save token errror:{0}", ex); } return; } if (HttpContext.Current != null && HttpContext.Current.Cache != null) { var cache = HttpContext.Current.Cache; var oldToken = cache[userKey] as string; if (!string.IsNullOrEmpty(oldToken)) { cache.Remove(string.Format("{0}@{1}", AccountServerToken, oldToken)); } cache[redisKey] = userToken; cache[userKey] = key; } else { string oldToken; if (userHashCache.TryGetValue(userToken.UserId, out oldToken)) { UserToken temp; userTokenCache.TryRemove(oldToken, out temp); } userTokenCache[key] = userToken; } }
/// <summary> /// /// </summary> /// <param name="key"></param> /// <param name="userToken"></param> public static void SaveToken(string key, UserToken userToken) { string userKey = string.Format("{0}:{1}", AccountServerToken, userToken.UserId); string redisKey = string.Format("{0}@{1}", AccountServerToken, key); if (!string.IsNullOrEmpty(RedisHost) && RedisConnected) { //use redis cache. RedisConnectionPool.Process(client => { string oldToken = client.Get<string>(userKey); if (!string.IsNullOrEmpty(oldToken)) { client.Remove(string.Format("{0}@{1}", AccountServerToken, oldToken)); } client.Set(redisKey, userToken, userToken.ExpireTime); client.Set(userKey, key, userToken.ExpireTime); }); return; } if (HttpContext.Current != null && HttpContext.Current.Cache != null) { var cache = HttpContext.Current.Cache; var oldToken = cache[userKey] as string; if (!string.IsNullOrEmpty(oldToken)) { cache.Remove(string.Format("{0}@{1}", AccountServerToken, oldToken)); } cache[redisKey] = userToken; cache[userKey] = key; } else { string oldToken; if (userHashCache.TryGetValue(userToken.UserId, out oldToken)) { UserToken temp; userTokenCache.TryRemove(oldToken, out temp); } userTokenCache[key] = userToken; } }