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); }
public Task Logout() { _isAuthenticated = false; _authenticatedUser = null; LocalStorage.Storage.Remove(LocalStorageKey.SavedAuthenticatedUser); return(Task.CompletedTask); }
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); } }
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); }