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

时间:2023-03-09 05:44:08
简单使用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 = ;
user.Age = ;
user.Address = "杭州";
//*****
//*****将登录人信息信息redis缓存
HashEntry[] entrys = new HashEntry[];//数组对象长度一定要和下面SetValue赋值一一对应
HashEntry entry = new HashEntry("Name", user.Name);
entrys.SetValue(entry, );
entry = new HashEntry("Sex", user.Sex);
entrys.SetValue(entry, );
entry = new HashEntry("Age", user.Age);
entrys.SetValue(entry, );
entry = new HashEntry("Address", user.Address);
entrys.SetValue(entry, );
TimeSpan ts = new TimeSpan();//默认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[].Value;
user.Sex = (int)arr[].Value;
user.Age = (int)arr[].Value;
user.Address = arr[].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);
}

  两个方法运行结果

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

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

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

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

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

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

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