public override async Task <SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
        {
            try
            {
                User authUser = await ForumApi.AuthenticateUser(userName, password);

                User user = await UserManager.FindByIdAsync(authUser.Id);

                if (user == null)
                {
                    var result = await UserManager.CreateAsync(authUser);

                    if (!result.Succeeded)
                    {
                        return(SignInStatus.RequiresVerification);
                    }
                    user = authUser;
                }

                if (authUser.IsBanned)
                {
                    return(SignInStatus.LockedOut);
                }

                await UserManager.UpdateAsync(user);
                await SignInAsync(user, isPersistent, true);

                return(SignInStatus.Success);
            }
            catch
            {
                return(SignInStatus.Failure);
            }
        }
        public async Task <SignInStatus> CookieSignInAsync(string passHash, string sessionId, bool isPersistent, bool rememberBrowser)
        {
            try
            {
                User authUser = await ForumApi.AuthenticateSession(passHash, sessionId);

                User user = await UserManager.FindByIdAsync(authUser.Id);

                if (user == null)
                {
                    var result = await UserManager.CreateAsync(authUser);

                    if (!result.Succeeded)
                    {
                        return(SignInStatus.RequiresVerification);
                    }
                    user = authUser;
                }

                if (authUser.IsBanned)
                {
                    return(SignInStatus.LockedOut);
                }

                await UserManager.UpdateAsync(user);
                await SignInAsync(user, isPersistent, rememberBrowser);

                return(SignInStatus.Success);
            }
            catch
            {
                return(SignInStatus.Failure);
            }
        }