Example #1
0
        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;
                }
            }
        }
Example #3
0
        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;
            }
        }