Esempio n. 1
0
        public async Task <IActionResult> WxLoginAsync(WxLoginParam loginParam)
        {
            // 使用IHttpClientFactory创建的HttpClient
            OpenIdParam openIdParam = await WxUtils.GetOpenIdAsync(loginParam, clientFactory.CreateClient());

            if (openIdParam == null || string.IsNullOrEmpty(openIdParam.session_key))
            {
                return(ValidationProblem("验证错误,Secret可能失效"));
            }
            WxPhoneModel wxPhoneModel = WxAppEncryptUtil.GetEncryptedDataStr(loginParam.EncryptedData, openIdParam.session_key, loginParam.Iv);

            if (wxPhoneModel == null)
            {
                return(ValidationProblem("用户信息解析错误"));
            }
            string phone = wxPhoneModel.PurePhoneNumber ?? wxPhoneModel.PhoneNumber;

            if (string.IsNullOrEmpty(phone))
            {
                return(ValidationProblem("可能未绑定手机号"));
            }
            TbUser user = await rep.GetEntityAsync(s => s.Phone.Equals(phone), s => new TbUser {
                State = s.State
            });

            if (user == null)
            {
                return(ValidationProblem("用户未注册"));
            }
            string token = AuthorizationUtil.GetToken(30, user.Id, user.Name, "user", user.CarNum);

            return(Ok(new { access_token = token }));
        }
Esempio n. 2
0
        public async Task <IActionResult> LoginAsync(LoginModel model)
        {
            TbUser user = await rep.GetEntityAsync(s => s.Name.Equals(model.name));

            if (user == null)
            {
                return(NotFound($"用户名'{model.name}'不存在"));
            }
            if (!WxAppEncryptUtil.MD5(model.pwd).Equals(user.Pwd))
            {
                return(ValidationProblem(new ValidationProblemDetails()
                {
                    Detail = "密码错误"
                }));
            }

            string   token     = AuthorizationUtil.GetToken(30, user.Id, user.Name, "user", user.CarNum);
            DateTime authTime  = DateTime.Now;
            DateTime expiresAt = authTime.AddMinutes(30);

            return(Ok(new
            {
                access_token = token,
                token_type = Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme,
                profile = new
                {
                    sid = user.Id,
                    name = user.Name,
                    auth_time = new DateTimeOffset(authTime).ToUnixTimeSeconds(),
                    expires_at = new DateTimeOffset(expiresAt).ToUnixTimeSeconds()
                }
            }));
        }