Пример #1
0
        public async Task <bool> IsAuthenticatedAndValid()
        {
            var authUserInfo = LocalStorage.Storage.GetValueOrDefault <ExternAuthUser>(StorageKey.ExternAuthUserInfo);

            if (authUserInfo == null)
            {
                _isAuthenticated = false;
                return(false);
            }

            // 기간 만료
            if (authUserInfo.ExpiresIn < DateTime.UtcNow)
            {
                _isAuthenticated = false;
                return(false);
            }

            var oAuth = OAuthProviderFactory.CreateProvider(authUserInfo.Provider);

            _authenticatedUser = await oAuth.GetUserInfoAsync(authUserInfo.Token);

            // 유효하지 않은 토큰
            if (_authenticatedUser == null)
            {
                _isAuthenticated = false;
                return(false);
            }

            _isAuthenticated = true;
            return(true);
        }
Пример #2
0
        public Task Logout()
        {
            _isAuthenticated   = false;
            _authenticatedUser = null;
            LocalStorage.Storage.Remove(LocalStorageKey.SavedAuthenticatedUser);

            return(Task.CompletedTask);
        }
Пример #3
0
        public async void OAuthLoginAsync(SNSProvider provider)
        {
            try
            {
                if (!ApiService.CheckInternetConnected())
                {
                    await UserDialogs.Instance.AlertAsync("Please check internet connection");
                }

                var oAuth         = OAuthProviderFactory.CreateProvider(provider);
                var authenticator = new OAuth2Authenticator(
                    oAuth.ClientId,
                    oAuth.Scope,
                    new Uri(oAuth.AuthorizationUrl),
                    new Uri(oAuth.RedirectUrl));

                // Completed
                authenticator.Completed += async(sender, eventArgs) =>
                {
                    _isAuthenticated = eventArgs.IsAuthenticated;

                    if (IsAuthenticated)
                    {
                        string token = eventArgs.Account.Properties["access_token"];
                        _authenticatedUser = await oAuth.GetUserInfoAsync(token);

                        LocalStorage.Storage.AddOrUpdateValue(StorageKey.ExternAuthUserInfo, _authenticatedUser);

                        Singleton.Get <ViewLocator>().Login.PoseLoginAsync();
                    }
                };

                // Error
                authenticator.Error += async(sender, eventArgs) =>
                {
                    _isAuthenticated = false;
                    await UserDialogs.Instance.AlertAsync($"Authentication error: {eventArgs.Message}");
                };

                var presenter = new Xamarin.Auth.Presenters.OAuthLoginPresenter();
                presenter.Login(authenticator);

                // 로그인 폼 닫힘
                presenter.Completed += (sender, eventArgs) =>
                {
                    UserDialogs.Instance.HideLoading();
                };
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Login Error : " + ex.Message);
            }
        }
Пример #4
0
        public async void OnOAuthComplete(object sender, EventArgs args)
        {
            var eventArgs = args as AuthenticatorCompletedEventArgs;

            if (eventArgs.IsAuthenticated)
            {
                string token = eventArgs.Account.Properties["access_token"];

                using (UserDialogs.Instance.Loading(LocalizeString.Loginning))
                {
                    // P_E_CheckVaildOAuthUser
                    _authenticatedUser = await _webApiService.RequestAsync <ExternAuthUser>(new WebRequestContext
                    {
                        SerializeType = SerializeType.MessagePack,
                        MethodType    = WebMethodType.POST,
                        BaseUrl       = AppConfig.PoseWebBaseUrl,
                        ServiceUrl    = AuthProxy.ServiceUrl,
                        SegmentGroup  = AuthProxy.P_E_CHECK_OAUTH_VALID,
                        NeedEncrypt   = true,
                        PostData      = new I_CheckVaildOAuthUser
                        {
                            SNSProvider = Cur_Provider,
                            AccessToken = token,
                        }
                    });

                    if (_authenticatedUser != null)
                    {
                        _isAuthenticated = true;

                        // PoseLogin success
                        if (await ShinyHost.Resolve <LoginViewModel>().PoseLogin(false))
                        {
                            LocalStorage.Storage.GetValueOrDefault <bool>(LocalStorageKey.IsRememberAccount, out bool isRemeberAccount);
                            if (isRemeberAccount)
                            {
                                LocalStorage.Storage.AddOrUpdateValue(LocalStorageKey.SavedAuthenticatedUser, _authenticatedUser);
                            }
                        }
                        else
                        {
                            _authenticatedUser = null;
                            _isAuthenticated   = false;
                        }
                    }
                }
            }

            ShinyHost.Resolve <LoginViewModel>().SetIsBusy(false);
        }