예제 #1
0
        public ActionResult Bind()
        {
            var memberId = GetMemberId();
            var count    = wechatCoreDb.QueryMemberWechat()
                           .Where(m => m.MemberId == memberId)
                           .Count();

            if (count > 0)
            {
                return(RedirectToAction("BindInfo"));
            }
            else
            {
                return(View());
            }
        }
예제 #2
0
        public async Task <APIResult <bool> > TryLoginAsync([FromBody] TryLoginArgsModel args)
        {
            if (string.IsNullOrEmpty(args.ClientId))
            {
                throw new ArgumentNullException("clientId");
            }
            var ip   = GetIp();
            var task = wechatCoreDb.QueryMemberWeChatLoginTask()
                       .Where(m => m.ClientId == args.ClientId)
                       .Where(m => m.AddIp == ip)
                       .OrderByDescending(m => m.Id)
                       .FirstOrDefault();

            if (task == null)
            {
                throw new Exception("请先发起登陆请求");
            }

            switch (task.Status)
            {
            case MemberWeChatLoginTaskStatus.扫二维码进行中:
                return(Success <bool>(false));

            case MemberWeChatLoginTaskStatus.扫二维码完成:
                var member = wechatCoreDb.QueryMemberWechat()
                             .Where(m => m.OpenId == task.OpenId)
                             .Where(m => !m.IsDel)
                             .FirstOrDefault();
                if (member == null)
                {
                    throw new Exception("请先绑定微信");
                }

                task.Status = MemberWeChatLoginTaskStatus.登陆完成;
                wechatCoreDb.SaveChanges();

                List <Claim> claims   = new List <Claim>();
                var          username = "******" + member.MemberId;

                var member2 = memberDb.QueryMember()
                              .Where(m => m.Id == member.MemberId)
                              .Where(m => !m.IsDel)
                              .Select(m => new
                {
                    Id       = m.Id,
                    Email    = m.Email,
                    Password = m.Password,
                    Truename = m.Truename
                })
                              .FirstOrDefault();
                if (member == null)
                {
                    throw new ArgumentException("账号不正确");
                }

                claims.Add(new Claim(ClaimTypes.Name, username, ClaimValueTypes.String, null));
                claims.Add(new Claim("Truename", member2.Truename, ClaimValueTypes.String));
                var userIdentity = new ClaimsIdentity("Form");
                userIdentity.AddClaims(claims);

                var principal = new ClaimsPrincipal(userIdentity);
                await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);

                return(Success <bool>(true));

            case MemberWeChatLoginTaskStatus.登陆完成:
            default:
                return(Error <bool>("登陆已经完成,任务失效"));
            }
        }