protected Credential(Credential innerCredential) { if(innerCredential == null) throw new ArgumentNullException("innerCredential"); _innerCredential = innerCredential; }
public CredentialTest() { _credential = new Credential("10012001", new Membership.User(101, "Popeye"), "Web", TimeSpan.FromHours(4), new DateTime(2015, 5, 15)); _credential.ExtendedProperties.Add("User.Avatar", ":001:"); _credential.ExtendedProperties.Add("User.Nickname", "钟少"); _credential.ExtendedProperties.Add("User.Gender", Zongsoft.Tests.Gender.Male); }
private string SerializeCertificationToJson(Credential credential) { return Zongsoft.Runtime.Serialization.Serializer.Json.Serialize(credential, new Runtime.Serialization.TextSerializationSettings() { Indented = false, Typed = true, SerializationBehavior = Runtime.Serialization.SerializationBehavior.IgnoreDefaultValue, }); }
protected virtual void Register(Credential credential) { var storage = this.EnsureService<Zongsoft.Runtime.Caching.ICache>(); //声明命名空间对应的所有凭证的集合 ICollection<string> namespaces = null; //获取要注册的用户及应用场景已经注册的凭证号 var originalCredentialId = storage.GetValue(this.GetCacheKeyOfUser(credential.User.UserId, credential.Scene)) as string; //确保同个用户在相同场景下只能存在一个凭证:如果获取的凭证号不为空并且有值,则 if(originalCredentialId != null && originalCredentialId.Length > 0) { //将同名用户及场景下的原来的凭证删除(即踢下线) storage.Remove(this.GetCacheKeyOfCredential(originalCredentialId)); //获取命名空间的凭证集合 namespaces = storage.GetValue(this.GetCacheKeyOfNamespace(credential.Namespace)) as ICollection<string>; //将原来的凭证号从对应的命名空间集合中删除 if(namespaces != null) namespaces.Remove(originalCredentialId); //将本地内存缓存中的凭证对象删除 _memoryCache.Remove(originalCredentialId); } //设置当前用户及场景所对应的唯一凭证号为新注册的凭证号 storage.SetValue(this.GetCacheKeyOfUser(credential.User.UserId, credential.Scene), credential.CredentialId, credential.Duration); //将当前凭证信息以JSON文本的方式保存到物理存储层中 storage.SetValue(this.GetCacheKeyOfCredential(credential.CredentialId), this.SerializeCertificationToJson(credential), credential.Duration); if(namespaces == null) { //获取当前凭证所在的命名空间的集合 namespaces = storage.GetValue(this.GetCacheKeyOfNamespace(credential.Namespace)) as ICollection<string>; //如果命名空间集合为空则创建它,并初始化包含当前凭证号,否则直接在集合中添加当前凭证号 if(namespaces == null) storage.SetValue(this.GetCacheKeyOfNamespace(credential.Namespace), new string[] { credential.CredentialId }); else namespaces.Add(credential.CredentialId); } else { namespaces.Add(credential.CredentialId); } //将缓存对象保存到本地内存缓存中 _memoryCache.SetValue(credential.CredentialId, credential, DateTime.Now.AddSeconds(credential.Duration.TotalSeconds / 2)); }
public static void SetCredentialCookie(Credential credential, TimeSpan duration) { if(credential == null) return; var ticket = new System.Web.HttpCookie(CredentialKey, credential.CredentialId); if(duration > TimeSpan.Zero) ticket.Expires = DateTime.Now + duration; HttpContext.Current.Response.Cookies.Set(ticket); }
public static void SetCredentialCookie(Credential credential) { SetCredentialCookie(credential, TimeSpan.Zero); }
protected Credential(Credential innerCredential) { _innerCredential = innerCredential ?? throw new ArgumentNullException(nameof(innerCredential)); }