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 : ""; } }
/// <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); }
/// <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; }
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); } }