Ejemplo n.º 1
0
		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);
		}
Ejemplo n.º 3
0
		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,
			});
		}
Ejemplo n.º 4
0
		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));
		}
Ejemplo n.º 5
0
		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);
		}
Ejemplo n.º 6
0
		public static void SetCredentialCookie(Credential credential)
		{
			SetCredentialCookie(credential, TimeSpan.Zero);
		}
Ejemplo n.º 7
0
 protected Credential(Credential innerCredential)
 {
     _innerCredential = innerCredential ?? throw new ArgumentNullException(nameof(innerCredential));
 }