public static async Task LoginMethod() { PixivCS.Objects.AuthResult res = null; string refreshToken = conf.RefreshToken; try { if (refreshToken != null && !refreshToken.Equals("Invalidation")) { res = await baseAPI.AuthAsync(refreshToken); conf.RefreshToken = res.Response.RefreshToken; var currentUser = res.Response.User; pixiv = new Pixiv(baseAPI, currentUser); frame.Navigate(typeof(MainPage), new ValueTuple <Pixiv, Conf>(pixiv, conf)); lp.webView.Visibility = Visibility.Collapsed; } else { lp.webView.Navigate(baseAPI.GenerateWebViewUri()); lp.webView.Visibility = Visibility.Visible; } } catch (Exception) { conf.RefreshToken = "Invalidation"; lp.webView.Navigate(baseAPI.GenerateWebViewUri()); lp.webView.Visibility = Visibility.Visible; } }
public static async Task LoginMethod() { PixivCS.Objects.AuthResult res = null; string refreshToken = conf.RefreshToken; try { if (refreshToken != null && !refreshToken.Equals("Invalidation")) { res = await baseAPI.AuthAsync(refreshToken); conf.RefreshToken = res.Response.RefreshToken; var currentUser = res.Response.User; pixiv = new Pixiv(baseAPI, currentUser); frame.Navigate(typeof(MainPage), new ValueTuple <Pixiv, Conf>(pixiv, conf)); } else { lp.webView.Source = baseAPI.GenerateWebViewUri(); lp.webView.Visibility = Visibility.Visible; } } catch (Exception) { //refreshToken失效或是代理+去除SNI导致的认证失败 try { baseAPI.ExperimentalConnection = false; res = await baseAPI.AuthAsync(refreshToken); conf.RefreshToken = res.Response.RefreshToken; var currentUser = res.Response.User; pixiv = new Pixiv(baseAPI, currentUser); frame.Navigate(typeof(MainPage), new ValueTuple <Pixiv, Conf>(pixiv, conf)); } catch (Exception e) { Console.WriteLine(e.Message); conf.RefreshToken = "Invalidation"; lp.webView.Source = baseAPI.GenerateWebViewUri(); lp.webView.Visibility = Visibility.Visible; } } }
private async void Login() { //启用实验性功能 directConnetion = chkExperimental.IsChecked.Value; GlobalBaseAPI.ExperimentalConnection = directConnetion; //保存设置 localSettings.Values["directConnection"] = directConnetion; stkTxts.Visibility = Visibility.Collapsed; stkBtns.Visibility = Visibility.Collapsed; btnTrouble.Visibility = Visibility.Collapsed; ringProgress.IsActive = true; grdLoading.Visibility = Visibility.Visible; bool success; PixivCS.Objects.AuthResult res = null; //异步执行登录 try { if (useToken) { res = await GlobalBaseAPI.AuthAsync(refreshToken); } else { res = await GlobalBaseAPI.AuthAsync(username, password); } success = true; } catch { success = false; if (useToken) { useToken = false; try { res = await GlobalBaseAPI.AuthAsync(username, password); success = true; } catch { success = false; } } } if (success) { //登录成功 //储存凭证 var vault = new PasswordVault(); try { vault.Remove(GetCredentialFromLocker(passwordResource)); vault.Remove(GetCredentialFromLocker(refreshTokenResource)); } catch { } finally { vault.Add(new PasswordCredential(passwordResource, username, password)); vault.Add(new PasswordCredential(refreshTokenResource, username, Data.OverAll.GlobalBaseAPI.RefreshToken)); } //保存当前的身份信息 currentUser = Data.CurrentUser.FromObject(res.Response.User); //如果取消了登录,则避免跳转到主页面 if (isCancelled) { resetView(); } else { Frame.Navigate(typeof(MainPage)); } } else { btnTrouble.Visibility = Visibility.Visible; } }