예제 #1
0
        public async Task<string> GetPersonNickNameByUserAccountIDAsync(long userAccountID)
        {
            using (KoalaBlogDbContext dbContext = new KoalaBlogDbContext())
            {
                PersonHandler perHandler = new PersonHandler(dbContext);
                UserAccountXPersonHandler uaxpHandler = new UserAccountXPersonHandler(dbContext);

                //1. Get the UserAccountXPerson
                UserAccountXPerson uaxp = await uaxpHandler.LoadByUserAccountIDAsync(userAccountID);

                //2. Get the Person NickName
                return uaxp != null && uaxp.Person != null ? uaxp.Person.NickName : "";
            }
        }
예제 #2
0
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="hashPassword">密码</param>
        /// <returns></returns>
        public async Task<Tuple<KoalaBlogIdentityObject, SignInStatus, string>> SignInAsync(string userName, string password, bool isPersistent)
        {
            KoalaBlogIdentityObject identityObject = new KoalaBlogIdentityObject();

            var userAccount = await GetByUserNameAsync(userName);

            if (userAccount != null)
            {
                //1. 设置Common Property。
                identityObject.UserID = userAccount.ID;
                identityObject.UserName = userAccount.UserName;
                identityObject.Email = userAccount.Email;
                identityObject.Status = userAccount.Status;

                bool isEmailConfirmed = userAccount.EmailConfirmed;
                if (!isEmailConfirmed)
                {
                    return new Tuple<KoalaBlogIdentityObject, SignInStatus, string>(identityObject, SignInStatus.NotYetEmailConfirmed, string.Empty);
                }
                else
                {
                    //2. 如果用户已经邮件验证完成则获取Person对象。
                    UserAccountXPersonHandler uaxpHandler = new UserAccountXPersonHandler(_dbContext);

                    UserAccountXPerson uaxp = await uaxpHandler.LoadByUserAccountIDAsync(userAccount.ID);

                    if (uaxp != null && uaxp.Person != null)
                    {
                        identityObject.PersonID = uaxp.Person.ID;
                        identityObject.PersonNickName = uaxp.Person.NickName;
                        identityObject.Introduction = uaxp.Person.Introduction;
                    }

                    bool isLockedOut = userAccount.Status == UserAccount.STATUS_SUSPENDED;
                    if (isLockedOut)
                    {
                        return new Tuple<KoalaBlogIdentityObject, SignInStatus, string>(identityObject, SignInStatus.LockedOut, string.Empty);
                    }

                    string pwd = KoalaBlogSecurityManager.CreatePasswordHash(password, userAccount.PasswordSalt);

                    bool isValid = pwd == userAccount.Password;
                    if (isValid)
                    {
                        userAccount.LastLogon = DateTime.Now;
                        userAccount.IsOnline = true;

                        await ModifyAsync(userAccount);

                        //3. 如果登录成功则生成一个Bearer Token。
                        TokenHandler tokenHandler = new TokenHandler(_dbContext);

                        DateTime? expirationDate = isPersistent ? DateTime.MaxValue : (DateTime?)null;
                        
                        Token bearerToken = await tokenHandler.GenerateBearerTokenAsync(userAccount.ID, expirationDate);

                        return new Tuple<KoalaBlogIdentityObject, SignInStatus, string>(identityObject, SignInStatus.Succeeded, bearerToken.AccessToken);
                    }
                    else
                    {
                        return new Tuple<KoalaBlogIdentityObject, SignInStatus, string>(identityObject, SignInStatus.WrongPassword, string.Empty);
                    }
                }
            }
            return new Tuple<KoalaBlogIdentityObject, SignInStatus, string>(identityObject, SignInStatus.Failure, string.Empty);
        }
예제 #3
0
        /// <summary>
        /// 根据UserAccountID获取Person
        /// </summary>
        /// <param name="userAccountID">用户ID</param>
        /// <returns></returns>
        public async Task<Person> LoadByUserAccountIDAsync(long userAccountID)
        {
            UserAccountXPersonHandler uaxpHandler = new UserAccountXPersonHandler(_dbContext);

            UserAccountXPerson uaxp = await uaxpHandler.LoadByUserAccountIDAsync(userAccountID);

            if(uaxp != null)
            {
                return uaxp.Person;
            }

            return null;
        }
예제 #4
0
        public async Task Test_01_CreatePersonAsync()
        {
            using(KoalaBlogDbContext dbContext = new KoalaBlogDbContext())
            {
                PersonHandler perHandler = new PersonHandler(dbContext);
                UserAccountXPersonHandler uaxpHandler = new UserAccountXPersonHandler(dbContext);

                //1. Test normal create person
                Person p = await perHandler.CreatePersonAsync(testUA1);

                Assert.IsNotNull(p);
                Assert.AreEqual(p.NickName, "testUserAccount");
                Assert.AreEqual(p.Gender, null);
                Assert.AreEqual(p.RealNameAccessLevel, PersonInfoAccessInfo.MyselfOnly);
                Assert.AreEqual(p.SexualTrendAccessLevel, PersonInfoAccessInfo.MyselfOnly);
                Assert.AreEqual(p.DOBAccessLevel, PersonInfoAccessInfo.MyselfOnly);

                //2. Get the UserAccountXPerson and test
                UserAccountXPerson uaxp = await uaxpHandler.LoadByUserAccountIDAsync(testUA1.ID);
                Assert.IsNotNull(uaxp);
                Assert.AreEqual(uaxp.PersonID, p.ID);
                Assert.AreEqual(uaxp.UserAccountID, testUA1.ID);

                //3. Give the null parameter and check it.
                bool isChecked = false;
                try
                {
                    Person per = await perHandler.CreatePersonAsync(null);
                }
                catch (Exception ex)
                {
                    isChecked = true;
                    Assert.AreEqual(ex.GetType(), typeof(AssertException));
                    Assert.AreEqual(ex.Message, "UserAccount can't be null");
                }
                Assert.IsTrue(isChecked);

                //4. Give the error user account and check it.
                isChecked = false;
                try
                {
                    UserAccount ua = new UserAccount() { ID = 99999 };
                    Person per = await perHandler.CreatePersonAsync(ua);
                }
                catch (Exception ex)
                {
                    isChecked = true;
                    Assert.AreEqual(ex.GetType(), typeof(AssertException));
                    Assert.AreEqual(ex.Message, "This user account doesn't exist");
                }
                Assert.IsTrue(isChecked);

                //5. Give the same user account and check it.
                isChecked = false;
                try
                {
                    Person per = await perHandler.CreatePersonAsync(testUA1);
                }
                catch (Exception ex)
                {
                    isChecked = true;
                    Assert.AreEqual(ex.GetType(), typeof(AssertException));
                    Assert.AreEqual(ex.Message, "Existing relationships");
                }
                Assert.IsTrue(isChecked);
            }
        }