コード例 #1
0
        public IActionResult RunLogin([FromBody] UserLoginModel userLoginModel)
        {
            if (!ModelState.IsValid)
            {
                return(new JsonResult("IsValid"));
            }

            var userEntity = _userService.CheckUserLogin(userLoginModel);

            if (userEntity == null)
            {
                return(new JsonResult("用户名或密码错误"));
            }
            UserLoginResultModel resultModel = new UserLoginResultModel();

            resultModel.AuthInfo = _userService.GenerateAuthInfo(userEntity);
            resultModel.UserName = userEntity.UserName;
            resultModel.UserId   = userEntity.Id.ToString();

            if (HttpContext.Request.Cookies.ContainsKey("RedirectUrl"))
            {
                resultModel.RedirectUrl = HttpContext.Request.Cookies["RedirectUrl"];
            }


            CookieOptions cookieOptions = new CookieOptions()
            {
                Expires = DateTime.Now.AddDays(7)
            };

            HttpContext.Response.Cookies.Append("UserId", resultModel.UserId, cookieOptions);
            HttpContext.Response.Cookies.Append("UserName", resultModel.UserName, cookieOptions);
            HttpContext.Response.Cookies.Append("AuthInfo", resultModel.AuthInfo, cookieOptions);
            return(new JsonResult(resultModel));
        }
コード例 #2
0
        public async Task <ResultModel <UserLoginResultModel> > Login(UserLoginRequestModel requestModel)
        {
            var discoveryDocumentRequest = new DiscoveryDocumentRequest
            {
                Address = ApplicationConfig.IdentityServer.Url,
                Policy  = new DiscoveryPolicy
                {
                    RequireHttps = false
                }
            };
            var client = new HttpClient();
            DiscoveryResponse discoveryResponse = await client.GetDiscoveryDocumentAsync(discoveryDocumentRequest);

            if (discoveryResponse.IsError)
            {
                return(ResultModel <UserLoginResultModel> .Fail("连接认证服务器失败"));
            }
            TokenResponse tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
            {
                Address      = discoveryResponse.TokenEndpoint,
                ClientId     = ClientType.Web.ToString(),
                ClientSecret = ApplicationConfig.IdentityServer.Secret,
                UserName     = requestModel.Account,
                Password     = requestModel.Password,
                Scope        = ApplicationConfig.IdentityServer.Scope
            });

            if (tokenResponse.IsError)
            {
                return(ResultModel <UserLoginResultModel> .Fail(tokenResponse.ErrorDescription));
            }
            var result = new UserLoginResultModel(tokenResponse.Raw.JsonToObject <TokenResultModel>());

            return(ResultModel <UserLoginResultModel> .Success(result, "登录成功"));
        }
コード例 #3
0
ファイル: LoginRepository.cs プロジェクト: ycwu/EIPWeb
        /// <summary>
        /// 將資料讀取出來
        /// </summary>
        /// <returns></returns>
        public async Task <UserLoginResultModel> ReadAsync()
        {
            string data = "";

            data = await StorageUtility.ReadFromDataFileAsync("", MainHelper.資料主目錄, MainHelper.UserLoginAPIName);

            Item = JsonConvert.DeserializeObject <UserLoginResultModel>(data);
            if (Item == null)
            {
                Item = new UserLoginResultModel();
            }
            return(Item);
        }
コード例 #4
0
        public async Task <ResultModel <UserLoginResultModel> > LoginByWeChatCode(WeChatMiniProgramLoginRequestModel requestModel)
        {
            var    weChatAppletManager = new WeChatMiniProgramManager(ApplicationConfig.CYRecordBillWeChatConfig);
            string openID = weChatAppletManager.GetOpenIDByCode(requestModel.Code);

            try
            {
                TokenResponse tokenResponse = await IdentityClientHelper.GetTokenResponseAsync(openID, requestModel.NickName, LoginCategory.OpenID);

                if (tokenResponse.IsError)
                {
                    return(ResultModel <UserLoginResultModel> .Fail(tokenResponse.ErrorDescription));
                }
                var result = new UserLoginResultModel(tokenResponse.Raw.JsonToObject <TokenResultModel>());
                return(ResultModel <UserLoginResultModel> .Success(result, "登录成功"));
            }
            catch (InvalidOperationException ex)
            {
                return(ResultModel <UserLoginResultModel> .Fail(ex.Message));
            }
        }
コード例 #5
0
ファイル: LoginRepository.cs プロジェクト: ycwu/EIPWeb
        /// <summary>
        /// 使用者身分驗證:登入 (使用 GET)
        /// </summary>
        /// <param name="account"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public async Task <APIResult> GetAsync(string account, string password)
        {
            using (HttpClientHandler handler = new HttpClientHandler())
            {
                using (HttpClient client = new HttpClient(handler))
                {
                    try
                    {
                        #region 呼叫遠端 Web API
                        string FooUrl = $"{MainHelper.UserLoginAPIUrl}";
                        HttpResponseMessage response = null;

                        // Accept 用於宣告客戶端要求服務端回應的文件型態 (底下兩種方法皆可任選其一來使用)
                        //client.DefaultRequestHeaders.Accept.TryParseAdd("application/json");
                        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                        // 這裡是要存取 Azure Mobile 服務必須要指定的 Header
                        //client.DefaultRequestHeaders.Add("ZUMO-API-VERSION", "2.0.0");

                        #region 將帳號與密碼進行編碼
                        var byteArray = Encoding.ASCII.GetBytes($"{account}:{password}");
                        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
                        #endregion

                        #region  設定相關網址內容
                        var fooFullUrl = $"{FooUrl}";
                        #endregion

                        response = await client.GetAsync(fooFullUrl);

                        #endregion

                        #region 處理呼叫完成 Web API 之後的回報結果
                        if (response != null)
                        {
                            if (response.IsSuccessStatusCode == true)
                            {
                                #region 狀態碼為成功
                                // 取得呼叫完成 API 後的回報內容
                                String strResult = await response.Content.ReadAsStringAsync();

                                fooAPIResult = JsonConvert.DeserializeObject <APIResult>(strResult, new JsonSerializerSettings {
                                    MetadataPropertyHandling = MetadataPropertyHandling.Ignore
                                });
                                if (fooAPIResult.Success == true)
                                {
                                    #region 讀取成功的回傳資料
                                    Item = JsonConvert.DeserializeObject <UserLoginResultModel>
                                               (fooAPIResult.Payload.ToString(), new JsonSerializerSettings {
                                        MetadataPropertyHandling = MetadataPropertyHandling.Ignore
                                    });

                                    var fooSystemStatusRepository = new SystemStatusRepository();
                                    await fooSystemStatusRepository.ReadAsync();

                                    fooSystemStatusRepository.Item.AccessToken = Item.AccessToken;
                                    await fooSystemStatusRepository.SaveAsync();

                                    await SaveAsync();

                                    #endregion
                                }
                                else
                                {
                                    #region API 的狀態碼為 不成功
                                    Item         = new UserLoginResultModel();
                                    fooAPIResult = new APIResult
                                    {
                                        Success = false,
                                        Message = fooAPIResult.Message,
                                        Payload = Item,
                                    };
                                    #endregion
                                }
                                await SaveAsync();

                                #endregion
                            }
                            else
                            {
                                fooAPIResult = new APIResult
                                {
                                    Success   = false,
                                    Message   = $"應用程式呼叫 API 發生異常{Environment.NewLine}錯誤代碼:{response.StatusCode}{Environment.NewLine}{response.ReasonPhrase}",
                                    TokenFail = false,
                                    Payload   = null,
                                };
                            }
                        }
                        else
                        {
                            fooAPIResult = new APIResult
                            {
                                Success = false,
                                Message = "應用程式呼叫 API 發生異常",
                                Payload = null,
                            };
                        }
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        fooAPIResult = new APIResult
                        {
                            Success = false,
                            Message = ex.Message,
                            Payload = ex,
                        };
                    }
                }
            }

            return(fooAPIResult);
        }
コード例 #6
0
ファイル: LoginRepository.cs プロジェクト: ycwu/EIPWeb
        /// <summary>
        /// 使用者身分驗證:登入 (使用 POST)
        /// </summary>
        /// <param name="account"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public async Task <APIResult> PostAsync(string account, string password)
        {
            using (HttpClientHandler handler = new HttpClientHandler())
            {
                using (HttpClient client = new HttpClient(handler))
                {
                    try
                    {
                        #region 呼叫遠端 Web API
                        string FooUrl = $"{MainHelper.UserLoginAPIUrl}";
                        HttpResponseMessage response = null;

                        // Accept 用於宣告客戶端要求服務端回應的文件型態 (底下兩種方法皆可任選其一來使用)
                        //client.DefaultRequestHeaders.Accept.TryParseAdd("application/json");
                        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                        // 這裡是要存取 Azure Mobile 服務必須要指定的 Header
                        client.DefaultRequestHeaders.Add("ZUMO-API-VERSION", "2.0.0");

                        #region 使用 FormUrlEncodedContent 產生要 Post 的資料

                        var fooUserLoginModel = new UserLoginModel()
                        {
                            Account  = account,
                            Password = password
                        };

                        // 強型別用法
                        // https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/keywords/nameof
                        Dictionary <string, string> formDataDictionary = new Dictionary <string, string>()
                        {
                            { nameof(fooUserLoginModel.Account), fooUserLoginModel.Account },
                            { nameof(fooUserLoginModel.Password), fooUserLoginModel.Password },
                        };

                        // https://msdn.microsoft.com/zh-tw/library/system.net.http.formurlencodedcontent(v=vs.110).aspx
                        var formData = new FormUrlEncodedContent(formDataDictionary);
                        #endregion

                        #region  設定相關網址內容
                        var fooFullUrl = $"{FooUrl}";
                        #endregion

                        response = await client.PostAsync(fooFullUrl, formData);

                        #endregion

                        #region 處理呼叫完成 Web API 之後的回報結果
                        if (response != null)
                        {
                            if (response.IsSuccessStatusCode == true)
                            {
                                #region 狀態碼為成功
                                // 取得呼叫完成 API 後的回報內容
                                String strResult = await response.Content.ReadAsStringAsync();

                                fooAPIResult = JsonConvert.DeserializeObject <APIResult>(strResult, new JsonSerializerSettings {
                                    MetadataPropertyHandling = MetadataPropertyHandling.Ignore
                                });
                                if (fooAPIResult.Success == true)
                                {
                                    #region 讀取成功的回傳資料
                                    Item = JsonConvert.DeserializeObject <UserLoginResultModel>
                                               (fooAPIResult.Payload.ToString(), new JsonSerializerSettings {
                                        MetadataPropertyHandling = MetadataPropertyHandling.Ignore
                                    });

                                    var fooSystemStatusRepository = new SystemStatusRepository();
                                    await fooSystemStatusRepository.ReadAsync();

                                    fooSystemStatusRepository.Item.AccessToken = Item.AccessToken;
                                    await fooSystemStatusRepository.SaveAsync();

                                    await SaveAsync();

                                    #endregion
                                }
                                else
                                {
                                    #region API 的狀態碼為 不成功
                                    Item         = new UserLoginResultModel();
                                    fooAPIResult = new APIResult
                                    {
                                        Success = false,
                                        Message = fooAPIResult.Message,
                                        Payload = Item,
                                    };
                                    #endregion
                                }
                                await SaveAsync();

                                #endregion
                            }
                        }
                        else
                        {
                            #region API 的狀態碼為 不成功
                            fooAPIResult = new APIResult
                            {
                                Success = false,
                                Message = $"狀態碼:{response.StatusCode}{Environment.NewLine}{response.ReasonPhrase}",
                                Payload = null,
                            };
                            #endregion
                        }
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        fooAPIResult = new APIResult
                        {
                            Success = false,
                            Message = ex.Message,
                            Payload = ex,
                        };
                    }
                }
            }

            return(fooAPIResult);
        }