简单使用redis实现sso单点登录

  前面几篇分享了nosql只mongodb,今天简单分享另一个nosql神兵redis。

  主要模仿sso单点登录,将登录人信息写入redis。话不多说,直接上马,驾。

     /// <summary>
        /// 
        /// </summary>
        /// <param name="name"></param>
        /// <param name="pass"></param>
        /// <returns></returns>
        public string Login(string name, string pass)
        {
            //******
            //name,pass登陆成功(^_^)
            //******
            //生成tokan
            var token = "tianshangbaiyujing";//Guid.NewGuid().ToString();
            //*****获取user信息
            var user = new User();
            user.Name = "白玉京";
            user.Sex = 0;
            user.Age = 20;
            user.Address = "杭州";
            //*****
            //*****将登录人信息信息redis缓存
            HashEntry[] entrys = new HashEntry[4];//数组对象长度一定要和下面SetValue赋值一一对应
            HashEntry entry = new HashEntry("Name", user.Name);
            entrys.SetValue(entry, 0);
            entry = new HashEntry("Sex", user.Sex);
            entrys.SetValue(entry, 1);
            entry = new HashEntry("Age", user.Age);
            entrys.SetValue(entry, 2);
            entry = new HashEntry("Address", user.Address);
            entrys.SetValue(entry, 3);
            TimeSpan ts = new TimeSpan(864000000000);//默认1天
            RedisHelper.AddHashKey(token, entrys, ts);
            //*****
            //*****将user信息存入userSession对象返回给前端
            var session = new UserSession() { Token = token, User = user };
            //*****
            return JsonConvert.SerializeObject(session);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public string TestUserToken(string token)
        {
            var arr = RedisHelper.GetHashALL(token);
            User user = new User();
            user.Name = arr[0].Value;
            user.Sex = (int)arr[1].Value;
            user.Age = (int)arr[2].Value;
            user.Address = arr[3].Value;
            return JsonConvert.SerializeObject(user);
        }
        /// <summary>
        /// UserSession
        /// </summary>
        public class UserSession
        {
            public string Token { get; set; }
            public User User { get; set; }
        }
        /// <summary>
        /// User
        /// </summary>
        public class User
        {
            /// <summary>
            /// 姓名
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 性别0:男,1:女
            /// </summary>
            public int Sex { get; set; }
            /// <summary>
            /// 年龄
            /// </summary>
            public int Age { get; set; }
            /// <summary>
            /// 地址
            /// </summary>
            public string Address { get; set; }
        }

  redisHelper类。

      static readonly ConnectionMultiplexer Redis = ConnectionMultiplexer.Connect("127.0.0.1:6379");
        static readonly IDatabase Db = Redis.GetDatabase();

       /// <summary>
        /// 
        /// </summary>
        /// <param name="key"></param>
        /// <param name="hashField"></param>
        /// <param name="exp"></param>
        public static void AddHashKey(string key, HashEntry[] hashField, TimeSpan? exp = null)
        {
            Db.HashSet(key, hashField);
            Db.KeyExpire(key, exp);
        }
       /// <summary>
        /// 获取hash表
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static HashEntry[] GetHashALL(string key)
        {
            return Db.HashGetAll(key);
        }
 

  两个方法运行结果

  

  写了半天,贴两分钟完事了,再贴几张redisServer启动吧,都是cmd命令,跟mongo很像,就不细说了。

  启动客户端看下刚才存的数据。

  这样登录完成后,每次请求接口带上token就可以获取登录信息了。

原文地址:https://www.cnblogs.com/baiyujing/p/8325154.html