private async void NavigateUserOnSignedInResult(LogOnResult result) { if (result.SignedIn) { IsSignInInvalid = false; switch (result.AccountStatus) { case UserAccountStatus.Activated: _navigationService.ClearHistory(); _navigationService.Navigate(ViewNames.Dashboard, null); break; case UserAccountStatus.NotActivated: _navigationService.Navigate(ViewNames.ConfirmRegistration, null); break; case UserAccountStatus.Blocked: await _alertMessageService.ShowAsync(_resourceLoader.GetString("AccountBlockedByAdmin"), string.Empty, DialogCommands.CloseDialogCommand); break; default: throw new ArgumentOutOfRangeException(); } Close(); } else { IsSignInInvalid = true; await _alertMessageService.ShowAsync(_resourceLoader.GetString("InvalidUserNameOrPassword"), _resourceLoader.GetString("Error"), DialogCommands.CloseDialogCommand); } }
public static LogOnResult IntegerToLoginResult(int value) { LogOnResult res = LogOnResult.Fail; switch (value) { case 0: res = LogOnResult.None; break; case 1: res = LogOnResult.Ok; break; case 2: res = LogOnResult.LockUser; break; case 3: res = LogOnResult.Fail; break; case 1001: res = LogOnResult.Admin; break; case 1002: res = LogOnResult.Administrative; break; } return(res); }
/// <summary> /// 用户登陆 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void loginButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (string.IsNullOrEmpty(userName.Text.Trim())) { errorMessage.Content = "用户名不能为空"; } else if (string.IsNullOrEmpty(userPassword.Password.Trim())) { errorMessage.Content = "密码不能为空"; } else if (string.IsNullOrEmpty(userCaptcha.Text.Trim())) { errorMessage.Content = "验证码不能为空"; } else { Parameters parameters = new Parameters(); parameters.Add("source", "radio"); parameters.Add("alias", userName.Text.Trim()); parameters.Add("form_password", userPassword.Password.Trim()); parameters.Add("captcha_solution", userCaptcha.Text.Trim()); parameters.Add("captcha_id", CaptchaID); parameters.Add("from", "mainsite"); parameters.Add("remember", "on"); string LogOnJson = ""; await Task.Run(() => { LogOnJson = new ConnectionBase().Post("http://douban.fm/j/login", Encoding.UTF8.GetBytes(parameters.ToString())); }); if (LogOnJson == string.Empty) { errorMessage.Content = "网络连接错误"; return; } else { LogOnResult logonresult = LogOnResult.FromJson(LogOnJson); if (logonresult.r == 1) { errorMessage.Content = logonresult.err_msg; return; } else if (logonresult.r == 0) { loginCanvas.Visibility = Visibility.Collapsed; loginedCanvas.Visibility = Visibility.Visible; loginedName.Content = logonresult.user_info.name; loginedPlayed.Content = logonresult.user_info.play_record.played + "首"; loginedLiked.Content = logonresult.user_info.play_record.liked + "首"; loginedBanned.Content = logonresult.user_info.play_record.banned + "首"; loginTitle.Content = "用户"; LoginState = 1; loginUserName = logonresult.user_info.name; } } } }
///// <summary> ///// 验证码ID ///// </summary> //private string captchaId; #endregion #region 成员方法 ///// <summary> ///// 更新验证码 ///// </summary> //public void UpdateCaptcha() //{ // HasCaptcha = true; // captchaId = null; // CaptchaUrl = null; // ThreadPool.QueueUserWorkItem(new WaitCallback((state) => // { // captchaId = new ConnectionBase().Get("http://douban.fm/j/new_captcha"); // Dispatcher.BeginInvoke(new Action(() => // { // if (string.IsNullOrEmpty(captchaId)) // { // HasCaptcha = false; // captchaId = null; // CaptchaUrl = null; // } // else // { // captchaId = captchaId.Trim('\"'); // HasCaptcha = true; // CaptchaUrl = @"http://douban.fm/misc/captcha?size=m&id=" + captchaId; // } // })); // })); //} ///// <summary> ///// 根据douban.fm的主页的HTML代码更新登录状态 ///// </summary> ///// <param name="html">HTML文件</param> //internal void Update(string html) //{ // if (!string.IsNullOrEmpty(html)) // { // //获取昵称和播放记录 // Match match2 = Regex.Match(html, @"""user_name""[^<>]*?>(?!{{)([^<>]*?)\s*<", RegexOptions.Singleline); // string nickname = match2.Groups[1].Value; // Match match3 = Regex.Match(html, @"累积收听.*?(\d+).*?首"); // int played = 0; // int.TryParse(match3.Groups[1].Value, out played); // Match match4 = Regex.Match(html, @"加红心.*?(\d+).*?首"); // int liked = 0; // int.TryParse(match4.Groups[1].Value, out liked); // Match match5 = Regex.Match(html, @"(\d+).*?首不再播放"); // int banned = 0; // int.TryParse(match5.Groups[1].Value, out banned); // //更改属性 // Dispatcher.Invoke(new Action(() => // { // /*System.Diagnostics.Debug.WriteLine("**********************************************************************"); // System.Diagnostics.Debug.WriteLine(DateTime.Now + " 以下是本次“登录/注销”返回的结果页面"); // System.Diagnostics.Debug.Indent(); // System.Diagnostics.Debug.WriteLine(html); // System.Diagnostics.Debug.Unindent(); // System.Diagnostics.Debug.WriteLine("**********************************************************************"); // */ // if (!string.IsNullOrEmpty(nickname)) // { // Settings.User.Nickname = nickname; // Settings.User.Played = played; // Settings.User.Liked = liked; // Settings.User.Banned = banned; // System.Diagnostics.Debug.WriteLine("已登录"); // CurrentState = State.LoggedOn; // } // else // { // Settings.User.Nickname = string.Empty; // System.Diagnostics.Debug.WriteLine("已注销"); // CurrentState = State.LoggedOff; // } // })); // } // else // Dispatcher.Invoke(new Action(() => // { // if (CurrentState == State.LoggingOn) CurrentState = State.LoggedOff; // else if (CurrentState == State.LoggingOff) CurrentState = State.LoggedOn; // else if (CurrentState == State.Unknown) CurrentState = State.LoggedOff; // else CurrentState = State.LoggedOff; // })); //} /// <summary> /// 根据服务器返回的登录结果更新登录状态 /// </summary> private void UpdateWhenLogOn(LogOnResult result) { Debug.Assert(result != null, "result != null"); string errorMessage = null; if (!result.r) { Settings.User.UserID = result.user_id; Settings.User.Token = result.token; Settings.User.Expire = result.expire; Settings.User.Nickname = result.user_name; Settings.User.Email = result.email; UpdateUserInfo(); } else { Debug.WriteLine(result.err); switch (result.err) { case "invalid_username": errorMessage = Resources.Resources.InvalidUsername; break; case "wrong_password": errorMessage = Resources.Resources.WrongPassword; break; case null: case "": case "unknown_error": errorMessage = Resources.Resources.UnknownError; break; default: errorMessage = result.err; break; } } Dispatcher.Invoke(new Action(() => { LogOnFailedMessage = errorMessage; if (!string.IsNullOrEmpty(Settings.User.Token)) { CurrentState = State.LoggedOn; } else { ResetUser(); } })); }
/// <summary> /// 登录 /// </summary> public void LogOn() { if (CurrentState != State.LoggedOff) { return; } CurrentState = State.LoggingOn; var username = Settings.User.Username ?? string.Empty; var password = Settings.User.Password ?? string.Empty; ThreadPool.QueueUserWorkItem(state => { LogOnResult result = null; List <string> errorMessages = new List <string>(); if (Regex.Match(username, @"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$", RegexOptions.IgnoreCase).Success) { var resultEmail = LogOnWithEmail(username, password); if (resultEmail != null) { if (!resultEmail.r) { result = resultEmail; } else { errorMessages.Add(resultEmail.err); } } } if (result == null) { var resultUsername = LogOnWithUsername(username, password); if (resultUsername != null) { if (!resultUsername.r) { result = resultUsername; } else { errorMessages.Add(resultUsername.err); } } } if (result == null) { result = new LogOnResult { r = true }; var invalidUsername = new[] { "invalid_user_name", "invalidate_email", "wrong_email" }; errorMessages = (from message in errorMessages where !string.IsNullOrEmpty(message) select invalidUsername.Contains(message) ? "invalid_username" : message).Distinct().ToList(); if (errorMessages.Count == 0) { result.err = "unknown_error"; } else { result.err = errorMessages.FirstOrDefault(message => message != "invalid_username") ?? errorMessages[0]; } } UpdateWhenLogOn(result); }); }