예제 #1
0
 public async Task NewMemberAccountAsync(MemberAccount entity)
 {
     using (var conn = CreateConnection())
     {
         await conn.InsertAsync <MemberAccount>(entity).ConfigureAwait(false);
     }
 }
예제 #2
0
 public async Task <bool> UpdateMemberAccountAsync(MemberAccount entity)
 {
     using (var conn = CreateConnection())
     {
         return((await conn.UpdateAsync(entity).ConfigureAwait(false)) > 0);
     }
 }
예제 #3
0
        public async Task <ActionResult> OnGet()
        {
            var code = Request.Query["code"];
            var UserAccessTokenResult = await wxService.GetMPAccessToken(code);

            HttpContext.Session.SetString("AccessToken", JsonConvert.SerializeObject(UserAccessTokenResult));

            var userInfo = await wxService.GetUserInfo(UserAccessTokenResult.AccessToken, UserAccessTokenResult.OpenId);

            var hasUser = await userManager.FindByLoginAsync("wxMP", UserAccessTokenResult.OpenId);

            if (hasUser == null)
            {
                var user = new MemberAccount
                {
                    UserName           = "******" + Guid.NewGuid().ToString(),
                    NormalizedUserName = userInfo.NickName
                };

                await userManager.CreateAsync(user, "WechatPassword123#");

                await userManager.AddLoginAsync(user, new UserLoginInfo("wxMP", UserAccessTokenResult.OpenId, "Wechat"));

                await userManager.AddClaimAsync(user, new System.Security.Claims.Claim("wxopenid", UserAccessTokenResult.OpenId));

                await signInManager.SignInAsync(user, true);
            }
            else
            {
                await signInManager.SignInAsync(hasUser, true);
            }


            return(Redirect("/"));
        }
예제 #4
0
        public ActionResult Register(Member mbr, MemberAccount memberAccount)
        {
            var a = ModelState.IsValid;

            string GetMemberID = db.Database.SqlQuery <string>("Select dbo.GetMemberID()").FirstOrDefault();

            mbr.mbrID           = GetMemberID;
            memberAccount.mbrID = GetMemberID;

            mbr.nickName      = mbr.mbrName;
            mbr.Points        = 0;
            mbr.mbrAut        = false;
            mbr.signupDate    = DateTime.Now;
            mbr.mbrImage      = "0.jpg";
            mbr.mbrBlock      = false;
            mbr.MemberAccount = memberAccount;


            if (ModelState.IsValid)
            {
                //db.Entry(mbr).State = EntityState.Modified;
                //db.Entry(mbr).State = EntityState.Detached;

                db.Member.Add(mbr);
                db.SaveChanges();
                //db.MemberAccount.Add(memberAccount);
                //db.SaveChanges();



                return(RedirectToAction("Registercheck", "login"));
            }
            ViewBag.RegisterErr = true;
            return(View("Login"));
        }
예제 #5
0
        public void CannotConvertRubToUse()
        {
            var sourceAccount = new MemberAccount
            {
                Balance = 10,
            };
            var targetAccount = new MemberAccount
            {
                Balance = 10,
            };
            var unitOfWork        = new Mock <IUnitOfWork>();
            var memberAccountRepo = new Mock <IMemberAccountReposotory>();
            var rateRepo          = new Mock <ICurrencyRateRepoository>();

            rateRepo.Setup(a => a.GetBy(It.IsAny <string>())).Returns <string>((x) =>
            {
                return(new CurrencyRate
                {
                    Rate = x == "rub" ? 80 : 0.9m,
                });
            });
            memberAccountRepo.Setup(a => a.GetByUser(It.IsAny <int>(), It.IsAny <string>())).Returns <int, string>((x, y) =>
            {
                return(y == "rub" ? sourceAccount : targetAccount);
            });

            unitOfWork.SetupGet(x => x.MemberAccounts).Returns(memberAccountRepo.Object);
            unitOfWork.SetupGet(x => x.CurrencyRates).Returns(rateRepo.Object);

            _target = new CurrencyConverterService(unitOfWork.Object);
            Assert.Catch <InvalidOperationException>(() => _target.Convert(new CurrencyConverClaim {
                From = "rub", To = "Usd", Amount = 100, UserId = 1
            }));
        }
예제 #6
0
        private Member TryJoin(PersonalDetailsMemberModel memberModel, IHavePasswords passwordsModel, Guid?friendInvitationId)
        {
            var account = new MemberAccount
            {
                FirstName    = memberModel.FirstName,
                LastName     = memberModel.LastName,
                EmailAddress = memberModel.EmailAddress
            };

            var credentials = new AccountLoginCredentials
            {
                LoginId         = memberModel.EmailAddress,
                Password        = passwordsModel.Password,
                ConfirmPassword = passwordsModel.ConfirmPassword,
            };

            // If the user is responding to an invitation then don't need to activate, unless they have changed their email.

            var friendInvitation          = GetFriendInvitation(friendInvitationId);
            var acceptingFriendInvitation = friendInvitation != null && string.Equals(account.EmailAddress, friendInvitation.InviteeEmailAddress, StringComparison.OrdinalIgnoreCase);
            var requiresActivation        = !acceptingFriendInvitation;

            // Join.

            var member = _accountsManager.Join(HttpContext, account, credentials, requiresActivation);

            // Deal with the invitations.

            if (acceptingFriendInvitation)
            {
                AcceptFriendInvitation(member.Id, friendInvitation);
            }

            return(member);
        }
예제 #7
0
파일: CBS.cs 프로젝트: masonclarke24/CBS
        public MemberAccount GetAccountDetail(string email, DateTime dateTime1, DateTime dateTime2)
        {
            MemberAccount requestedAccount = new MemberAccount(email, connectionString);

            requestedAccount.GetAccountDetails(dateTime1, dateTime2);
            return(requestedAccount);
        }
예제 #8
0
 /* Get specific User Account
  * Input = Id_student
  * return account that has Id_student equal input*/
 public MemberAccount GetUserAccount(string id_account)
 {
     try
     {
         //find user account
         var user = _dbContext.accounts.SingleOrDefault(x => x.Id_account == id_account);
         //if there is no account
         if (user == null)
         {
             return(null);
         }
         //if there is account in database
         MemberAccount newby = new MemberAccount()
         {
             Id_account = user.Id_account,
             Name       = user.Name,
             Point      = user.Point
         };
         return(newby);
     }
     catch (Exception)
     {
         //error
         return(null);
     }
 }
예제 #9
0
        public async Task <IActionResult> UserAuthenticate([FromBody] Token token)
        {
            TimeZoneInfo zone     = TimeZoneInfo.FindSystemTimeZoneById("SE Asia Standard Time");
            DateTime     dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, zone);

            try
            {
                var user = await _userService.AuthenticateAsync(token._Token);

                //if there is no user in database
                if (user == null)
                {
                    Log.Information("Access Denied. {DateTime}", dateTime);
                    return(BadRequest(new { message = "Access Denied." }));
                }

                // there is user in database
                Log.Information("user access {name}. {DateTime}.", user.Name, dateTime);
                MemberAccount member = new MemberAccount()
                {
                    Id_account = user.Id_account,
                    Name       = user.Name,
                    Point      = user.Point,
                    Token      = user.Token
                };
                return(Ok(member));
            }
            catch
            {
                //error
                Log.Information("Error User Authentication", dateTime);
                return(NotFound("Error User Authentication"));
            }
        }
예제 #10
0
        public ActionResult DeleteConfirmed(int id)
        {
            MemberAccount memberAccount = db.memberAccounts.Find(id);

            db.memberAccounts.Remove(memberAccount);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
예제 #11
0
 public static MemberAccountViewModel Create(MemberAccount account)
 {
     return(new MemberAccountViewModel
     {
         Balance = account.Balance,
         Currency = account.CurrencyCode,
     });
 }
예제 #12
0
    /// <summary>
    /// save the member account
    /// </summary>
    protected void btnSave_click(object sender, EventArgs e)
    {
        MemberAccount Account = MemberAccount.GetMemberAccountByMemberID(member.MemberID);

        Account.Username = txtTwitterUserName.Text;
        Account.Password = txtTwitterPassword.Text;

        Account.Save();
    }
예제 #13
0
 public ActionResult Edit([Bind(Include = "MemberID,UserName,Email,DateOfBirth,FirstName,LastName,MobilePhone")] MemberAccount memberAccount)
 {
     if (ModelState.IsValid)
     {
         db.Entry(memberAccount).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(memberAccount));
 }
예제 #14
0
        public void FilteredAccountDetails_ContainsOnlyFilterCriteria()
        {
            membershipApplication.CreateMemberAccount(out string _);
            CBS           requestDirector = new CBS(connectionString);
            MemberAccount foundAccount    = requestDirector.GetAccountDetail(membershipApplication.ProspectiveMemberContactInfo.Email, DateTime.Today.AddDays(-29), DateTime.Today.AddDays(1));

            foundAccount.FilterAccountDetails("membership");

            Assert.All(foundAccount.Transactions, (Transaction tran) => tran.Description.Contains("membership"));
        }
        public MemberAccount FindMemberAccount(string memberID)
        {
            SqlConnection ClubBaistConnection = new SqlConnection();

            ClubBaistConnection.ConnectionString = @"Data Source= (LocalDB)\MSSQLLocalDB; 
                                  Initial Catalog = aspnet-ClubBaistGolfManagement-53bc9b9d-9d6a-45d4-8429-2a2761773502;
                                                     Integrated Security = True; MultipleActiveResultSets=True";

            SqlCommand thecommand = new SqlCommand();

            thecommand.CommandType = CommandType.StoredProcedure;
            thecommand.Connection  = ClubBaistConnection;
            thecommand.CommandText = "GetMemberAccount";

            SqlParameter memberid = new SqlParameter();

            memberid.ParameterName = "@memberid";

            memberid.SqlDbType = SqlDbType.VarChar;
            memberid.Value     = memberID;
            memberid.Direction = ParameterDirection.Input;

            thecommand.Parameters.Add(memberid);

            ClubBaistConnection.Open();

            SqlDataReader theDataReader;

            theDataReader = thecommand.ExecuteReader();

            MemberAccount       chosenMemberAccount     = new MemberAccount();
            List <AccountEntry> accountEntriesforMember = new List <AccountEntry>();

            if (theDataReader.HasRows)
            {
                while (theDataReader.Read())
                {
                    AccountEntry accountEntry = new AccountEntry();

                    chosenMemberAccount.MemberId = theDataReader["MemberID"].ToString();
                    chosenMemberAccount.Balance  = Decimal.Parse(theDataReader["Balance"].ToString());

                    accountEntry.WhenCharged        = DateTime.Parse(theDataReader["WhenCharged"].ToString());
                    accountEntry.WhenMade           = DateTime.Parse(theDataReader["WhenMade"].ToString());
                    accountEntry.Amount             = Decimal.Parse(theDataReader["Amount"].ToString());
                    accountEntry.PaymentDescription = theDataReader["PaymentDescription"].ToString();

                    accountEntriesforMember.Add(accountEntry);
                }
            }
            ClubBaistConnection.Close();
            chosenMemberAccount.AccountEntries = accountEntriesforMember;
            return(chosenMemberAccount);
        }
예제 #16
0
        public ActionResult Create([Bind(Include = "MemberID,UserName,Email,DateOfBirth,FirstName,LastName,MobilePhone")] MemberAccount memberAccount)
        {
            if (ModelState.IsValid)
            {
                db.memberAccounts.Add(memberAccount);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(memberAccount));
        }
예제 #17
0
        public void SHOULD_THROW_ERROR_WHEN_REDEEMED_FROM_ACCOUNT_BALANCE_NOT_ENOUGH()
        {
            //Arrange
            var name    = "Lufthansa";
            var status  = "ACTIVE";
            var balance = 100;
            //Act
            var fakeMemberAccount = new MemberAccount(balance, status, name);

            //Assert
            Assert.Throws <MemberDomainException>(() => fakeMemberAccount.RedeemPointFromAccount(200));
        }
예제 #18
0
        private void NotifyPhotoUploaded(Member member, PhotoCollection photoCollection)
        {
            System.Diagnostics.Debug.Assert(member != null, "member != null");
            var memberAccount = MemberAccount.GetMemberAccountByMemberID(member.MemberID);

            if (MemberAccount.IsTwitterReady(memberAccount))
            {
                if (TwitterService.CanPost(MemberAccountActivity.GetLastActivity(member.MemberID, 1 /* Twitter */, 2 /* PhotoGallery */)))
                {
                    TwitterService.NotifyPhotoUploaded(memberAccount.Username, memberAccount.Password, member.WebMemberID, photoCollection.WebPhotoCollectionID);
                    MemberAccountActivity.SetLastActivity(member.MemberID, 1 /* Twitter */, 2 /* PhotoGallery */);
                }
            }
        }
예제 #19
0
        // GET: MemberAccounts/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            MemberAccount memberAccount = db.memberAccounts.Find(id);

            if (memberAccount == null)
            {
                return(HttpNotFound());
            }
            return(View(memberAccount));
        }
예제 #20
0
        public void GetAccountDetails_NotEmpty(MembershipType membershipType)
        {
            membershipApplication = CreateAndRecordMembershipApplication(membershipType);
            membershipApplication.CreateMemberAccount(out string _);
            CBS           requestDirector = new CBS(connectionString);
            MemberAccount foundAccount    = requestDirector.GetAccountDetail(membershipApplication.ProspectiveMemberContactInfo.Email, DateTime.Today.AddDays(-29), DateTime.Today.AddDays(1));

            Assert.NotEmpty(foundAccount.Transactions);
            Assert.False(string.IsNullOrWhiteSpace(foundAccount.Name));
            Assert.False(string.IsNullOrWhiteSpace(foundAccount.MembershipLevel));
            Assert.NotNull(foundAccount.MembershipType);

            RemoveMemberAccount();
            RemoveMembershipApplication();
        }
예제 #21
0
        protected ActionResult TryJoin(MemberJoin join, CheckBoxValue acceptTerms, Func <IErrorHandler> createErrorHandler)
        {
            try
            {
                join = join ?? new MemberJoin();

                // Process the post to check validations.

                if (acceptTerms == null || !acceptTerms.IsChecked)
                {
                    ModelState.AddModelError(new[] { new TermsValidationError("AcceptTerms") }, createErrorHandler());
                }

                // Try to join.

                if (acceptTerms != null && acceptTerms.IsChecked)
                {
                    var account = new MemberAccount
                    {
                        FirstName    = join.FirstName,
                        LastName     = join.LastName,
                        EmailAddress = join.EmailAddress,
                    };

                    var credentials = new AccountLoginCredentials
                    {
                        LoginId         = join.EmailAddress,
                        Password        = join.JoinPassword,
                        ConfirmPassword = join.JoinConfirmPassword,
                    };

                    _accountsManager.Join(HttpContext, account, credentials, true);
                    return(RedirectToUrl(JoinUrl));
                }

                // Not accepting terms so cannot proceed but also check whether any other fields fail validation.

                join.Prepare();
                join.Validate();
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, createErrorHandler());
            }

            return(null);
        }
예제 #22
0
        public ActionResult Join(MemberJoin joinModel, bool acceptTerms)
        {
            try
            {
                joinModel = joinModel ?? new MemberJoin();

                // Process the post to check validations.

                if (acceptTerms)
                {
                    // Try to join.

                    var account = new MemberAccount
                    {
                        FirstName    = joinModel.FirstName,
                        LastName     = joinModel.LastName,
                        EmailAddress = joinModel.EmailAddress,
                    };

                    var credentials = new AccountLoginCredentials
                    {
                        LoginId         = joinModel.EmailAddress,
                        Password        = joinModel.JoinPassword,
                        ConfirmPassword = joinModel.JoinConfirmPassword,
                    };

                    _accountsManager.Join(HttpContext, account, credentials, true);
                }
                else
                {
                    ModelState.AddModelError(new[] { new TermsValidationError("AcceptTerms") }, new StandardErrorHandler());

                    // Not accepting terms so cannot proceed but also check whether any other fields fail validation.

                    joinModel.Prepare();
                    joinModel.Validate();
                }
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new StandardErrorHandler());
            }

            return(Json(new JsonResponseModel()));
        }
 public bool CloseAccount(MemberAccount memberAccount)
 {
     try
     {
         var amountTransaction = memberAccount.AmountTransaction;
         amountTransaction.Id = Common.UniqueTransactionId();
         amountTransaction.TransactionType      = (int)TransactionType.Debit;
         amountTransaction.StatusId             = (int)AmountTransactionStatus.Pending;
         amountTransaction.TransactionPurposeId = SavingAccountModel.GetForcefullyTransactionPurposeIdByName(TransactionPurposeType.Closing.ToString());
         memberAccount.AmountTransactions.Add(amountTransaction);
         Repository.Instance.Update(memberAccount);
         return(true);
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
예제 #24
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            MemberAccount Account = MemberAccount.GetMemberAccountByMemberID(member.MemberID);

            if (Account == null)
            {
                Account = new MemberAccount();
                Account.MemberID = member.MemberID;
                Account.Save();
            }

            txtTwitterUserName.Text = Account.Username;
            txtTwitterPassword.Text = Account.Password;
        }

        txtTwitterUserName.Attributes.Add("value", txtTwitterUserName.Text);
    }
예제 #25
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            MemberAccount Account = MemberAccount.GetMemberAccountByMemberID(member.MemberID);

            if (Account == null)
            {
                Account          = new MemberAccount();
                Account.MemberID = member.MemberID;
                Account.Save();
            }

            txtTwitterUserName.Text = Account.Username;
            txtTwitterPassword.Text = Account.Password;
        }

        txtTwitterUserName.Attributes.Add("value", txtTwitterUserName.Text);
    }
예제 #26
0
        public JsonResult GetUserAccount(string id_account)
        {
            TimeZoneInfo  zone     = TimeZoneInfo.FindSystemTimeZoneById("SE Asia Standard Time");
            DateTime      dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, zone);
            MemberAccount account  = _accountRepo.GetUserAccount(id_account);

            //if there is user account return to this function
            if (account != null)
            {
                Log.Information("Get user account from mobile {name}. {DateTime).", account.Name, dateTime);
                return(Json(account));
            }
            //if there is no user account return to this function
            else
            {
                Log.Information("Get user account from mobile {name}, {DateTime}.", id_account, dateTime);
                return(Json(null));
            }
        }
예제 #27
0
        /*For checking token APIs, Finding id account and return some information*/
        public MemberAccount User_Information(string token)
        {
            //find account
            var user = _dbContext.accounts.SingleOrDefault(x => x.Token.Contains(token));

            //if there is no user
            if (user == null)
            {
                return(null);
            }
            //if there is user, create user form in order to return to user
            MemberAccount _user = new MemberAccount()
            {
                Id_account = user.Id_account,
                Name       = user.Name,
                Point      = user.Point
            };

            return(_user);
        }
예제 #28
0
        public void CanConvertRubToUse()
        {
            var sourceAccount = new MemberAccount
            {
                Balance = 1000,
            };
            var targetAccount = new MemberAccount
            {
                Balance = 10,
            };
            var unitOfWork        = new Mock <IUnitOfWork>();
            var memberAccountRepo = new Mock <IMemberAccountReposotory>();
            var rateRepo          = new Mock <ICurrencyRateRepoository>();

            rateRepo.Setup(a => a.GetBy(It.IsAny <string>())).Returns <string>((x) =>
            {
                return(new CurrencyRate
                {
                    Rate = x == "rub" ? 80 : 0.9m,
                });
            });
            memberAccountRepo.Setup(a => a.GetByUser(It.IsAny <int>(), It.IsAny <string>())).Returns <int, string>((x, y) =>
            {
                return(y == "rub" ? sourceAccount : targetAccount);
            });

            unitOfWork.SetupGet(x => x.MemberAccounts).Returns(memberAccountRepo.Object);
            unitOfWork.SetupGet(x => x.CurrencyRates).Returns(rateRepo.Object);

            _target = new CurrencyConverterService(unitOfWork.Object);
            _target.Convert(new CurrencyConverClaim {
                From = "rub", To = "Usd", Amount = 100, UserId = 1
            });
            var calculeted = _target.CalculateConvert("rub", "use", 100);

            Assert.AreEqual(sourceAccount.Balance, 900);
            Assert.AreEqual(targetAccount.Balance, 11.125);
            Assert.AreEqual(calculeted, 1.125);
        }
 public ActionResult AddSavingAccount(MemberAccount account)
 {
     if (ModelState.IsValid)
     {
         if (account.Id == 0)
         {
             account.AccountTypeId = (int)AccountType.SavingAccount;
             var accountTransaction = account.AmountTransaction;
             accountTransaction.Id = Common.UniqueTransactionId();
             accountTransaction.TransactionType = (int)TransactionType.Credit;
             accountTransaction.Amount          = account.MinAmount;
             account.AmountTransactions.Add(accountTransaction);
             var newRecord = Repository.Instance.Insert(account, true);
         }
         else
         {
             Repository.Instance.Update(account);
             Repository.Instance.Commit();
         }
     }
     return(View(new MemberAccount()));
 }
예제 #30
0
        public MemberAccount FindMemberAccount(string memberId)
        {
            var retrievedMemberAccountEntries = new List <MemberAccountEntry>();
            var requestedMemberAccount        = new MemberAccount();

            using var connection = new SqlConnection(ConnectionString);
            using var command    = new SqlCommand("GetMemberAccount", connection);
            command.CommandType  = CommandType.StoredProcedure;
            command.Parameters.Add("@memberId", SqlDbType.NVarChar).Value = memberId;

            //Open the connection and execute the reader
            connection.Open();
            var reader = command.ExecuteReader();

            if (reader.HasRows)
            {
                while (reader.Read()) // Mapping the program Object to Database
                {
                    requestedMemberAccount.MemberId     = memberId;
                    requestedMemberAccount.TotalBalance = (decimal)reader[4];

                    var retrievedMemberAccountEntry = new MemberAccountEntry()
                    {
                        WhenCharged     = (DateTime)reader[0],
                        WhenMade        = (DateTime)reader[1],
                        Amount          = (decimal)reader[2],
                        EntryDecription = (string)reader[3]
                    };

                    retrievedMemberAccountEntries.Add(retrievedMemberAccountEntry);
                }
            }
            reader.Close();
            requestedMemberAccount.AccountEntries = retrievedMemberAccountEntries;
            return(requestedMemberAccount);
        }
예제 #31
0
        public static IApplicationBuilder UseMPAuth(this IApplicationBuilder app)
        {
            app.MapWhen((ctx) =>
            {
                var accessTokenJson = ctx.Session.GetString("AccessToken");

                var accessToken = JsonConvert.DeserializeObject <UserAccessTokenResult>(accessTokenJson ?? "");

                var wxService = ctx.RequestServices.GetService <WxService>();
                return(ctx.Request.Headers["User-Agent"].Any(x => x.ToLower().Contains("micromessenger")) &&
                       !ctx.Request.Path.Value.Contains("/UrlWxMPLogin") &&
                       !(ctx.User.Identity.IsAuthenticated || !string.IsNullOrEmpty(accessToken?.OpenId)));
            }, appbuilder =>
            {
                appbuilder.Run(async ctx =>
                {
                    var wxService   = ctx.RequestServices.GetService <WxService>();
                    var callbackUrl = ctx.Request.Scheme + "://" + ctx.Request.Host + "/UrlWxMPLogin";
                    var redirectUrl = wxService.GetRedirectUrl(HttpUtility.UrlEncode(callbackUrl));
                    ctx.Response.Redirect(redirectUrl);
                    await Task.CompletedTask;
                });
            });

            app.Map("/UrlWxMPLogin", appBuilder =>
            {
                appBuilder.Run(async ctx =>
                {
                    var wxService     = appBuilder.ApplicationServices.GetService <WxService>();
                    var signInManager = ctx.RequestServices.GetService <SignInManager <MemberAccount> >();
                    var userManager   = ctx.RequestServices.GetService <UserManager <MemberAccount> >();
                    var logger        = ctx.RequestServices.GetService <ILogger <WxService> >();
                    try
                    {
                        var code = ctx.Request.Query["code"];
                        var UserAccessTokenResult = await wxService.GetMPAccessToken(code);
                        ctx.Session.SetString("AccessToken", JsonConvert.SerializeObject(UserAccessTokenResult));

                        var userInfo = await wxService.GetUserInfo(UserAccessTokenResult.AccessToken, UserAccessTokenResult.OpenId);

                        var hasUser = await userManager.FindByLoginAsync("wxMP", UserAccessTokenResult.OpenId);
                        logger.LogInformation("Has user");
                        if (hasUser == null)
                        {
                            var user = new MemberAccount
                            {
                                UserName           = "******" + Guid.NewGuid().ToString(),
                                NormalizedUserName = userInfo.NickName,
                                NickName           = userInfo.NickName,
                                MemberBind         = new MemberBind
                                {
                                    WxNickName = userInfo.NickName,
                                    WxOpenId   = userInfo.OpenId
                                }
                            };
                            await userManager.CreateAsync(user, "WechatPassword123#");
                            //await userManager.AddLoginAsync(user, new UserLoginInfo("wxMP", UserAccessTokenResult.OpenId, "Wechat"));
                            await userManager.AddClaimAsync(user, new Claim("wxopenid", UserAccessTokenResult.OpenId));
                            await userManager.AddClaimAsync(user, new Claim("nickName", userInfo.NickName));

                            await signInManager.SignInAsync(user, true);
                        }
                        else
                        {
                            logger.LogInformation("SignIn user");
                            var claims = await userManager.GetClaimsAsync(hasUser);
                            if (!claims.Any(x => x.Type == "wxopenid"))
                            {
                                await userManager.AddClaimAsync(hasUser, new Claim("wxopenid", UserAccessTokenResult.OpenId));
                            }
                            if (!claims.Any(x => x.Type == "nickName"))
                            {
                                await userManager.AddClaimAsync(hasUser, new Claim("nickName", userInfo.NickName));
                            }
                            await signInManager.SignInAsync(hasUser, true);
                        }

                        ctx.Response.Redirect("/");
                    }
                    catch (Exception exc)
                    {
                        logger.LogError(exc, exc.Message);
                    }
                });
            });

            return(app);
        }