Example #1
0
        /// <summary>
        /// 判斷這個使用者是否已經通過了身分驗證
        /// </summary>
        /// <returns></returns>
        public static async Task <Account> IsAlreadyAuthenticated()
        {
            // 取得 Prism 相依性服務使用到的容器
            IUnityContainer fooContainer = (XFoAuth2.App.Current as PrismApplication).Container;
            // 取得 IAccountStore 介面實際實作的類別物件
            IAccountStore fooIAccountStore = fooContainer.Resolve <IAccountStore>();

            #region 若可以取得使用者認證的使用者資訊,表示,這個使用者已經通過認證了
            if (fooIAccountStore.GetPlatform() == "UWP")
            {
                return(await fooIAccountStore.GetAccount());
            }
            else
            {
                // Retrieve any stored account information
                var accounts = await AccountStore.Create().FindAccountsForServiceAsync(AppName);

                var account = accounts.FirstOrDefault();

                // If we already have the account info then we are set
                if (account == null)
                {
                    return(null);
                }
                return(account);
            }
            #endregion
        }
Example #2
0
        /// <summary>
        /// 根據通過身分驗證的資訊(如 存取權杖),取得該使用者的明細資訊
        /// </summary>
        /// <param name="account"></param>
        /// <returns></returns>
        public static async Task FetchUserProfile(Account account)
        {
            // 取得 Prism 相依性服務使用到的容器
            IUnityContainer fooContainer = (XFoAuth2.App.Current as PrismApplication).Container;
            // 取得 IAccountStore 介面實際實作的類別物件
            IAccountStore fooIAccountStore = fooContainer.Resolve <IAccountStore>();

            if (AuthenticationHelper.OAuthType == OAuthTypeEnum.Google)
            {
                // 取得 OAuth2 需要用到的參數定義物件
                var fooOAuthParas = OAuthParas.FirstOrDefault(x => x.Type == OAuthTypeEnum.Google);
                // 取得使用者的詳細資訊
                var request  = new OAuth2Request("GET", new Uri(fooOAuthParas.UserInfoUrl), null, account);
                var response = await request.GetResponseAsync();

                if (response != null)
                {
                    // 取得回傳的 JSON 格式文字
                    var userJson = response.GetResponseText();
                    var user     = JsonConvert.DeserializeObject <GoogleUserProfile>(userJson);
                    var foo      = user;

                    #region 將認證通過的相關使用者明細資訊,儲存到 Account 物件內
                    account.Properties[Constants.IDAccountProperty]        = user.Id;
                    account.Properties[Constants.NameAccountProperty]      = user.Name;
                    account.Properties[Constants.EmailAccountProperty]     = user.Email;
                    account.Properties[Constants.PhotoAccountProperty]     = user.Picture;
                    account.Properties[Constants.LoginTypeAccountProperty] = AuthenticationHelper.OAuthType.ToString();
                    #endregion

                    #region 將通過認證的 OAuth2 帳號與使用者詳細資訊,儲存到本機上(其中 Xamarin.Auth 並不支援 UWP,所以,使用相依性注入服務來解決
                    if (fooIAccountStore.GetPlatform() == "UWP")
                    {
                        await fooIAccountStore.SaveAccount(account);
                    }
                    else
                    {
                        AccountStore.Create().Save(account, AuthenticationHelper.AppName);
                    }
                    #endregion
                }
            }
            else
            {
                // 取得 OAuth2 需要用到的參數定義物件
                var fooOAuthParas = OAuthParas.FirstOrDefault(x => x.Type == OAuthTypeEnum.Facebook);
                // 取得使用者的詳細資訊
                var request  = new OAuth2Request("GET", new Uri(fooOAuthParas.UserInfoUrl), null, account);
                var response = await request.GetResponseAsync();

                if (response != null)
                {
                    // 取得回傳的 JSON 格式文字
                    var    userJson = response.GetResponseText();
                    string fooJson  = userJson;
                    var    user     = JsonConvert.DeserializeObject <FacebookUserProfile>(userJson);
                    var    foo      = user;

                    #region 將認證通過的相關使用者明細資訊,儲存到 Account 物件內
                    account.Properties[Constants.IDAccountProperty]        = user.id;
                    account.Properties[Constants.NameAccountProperty]      = $"{user.first_name} {user.name}";
                    account.Properties[Constants.EmailAccountProperty]     = user.email;
                    account.Properties[Constants.PhotoAccountProperty]     = user.picture.data.url;
                    account.Properties[Constants.LoginTypeAccountProperty] = AuthenticationHelper.OAuthType.ToString();
                    #endregion

                    #region 將通過認證的 OAuth2 帳號與使用者詳細資訊,儲存到本機上(其中 Xamarin.Auth 並不支援 UWP,所以,使用相依性注入服務來解決
                    if (fooIAccountStore.GetPlatform() == "UWP")
                    {
                        await fooIAccountStore.SaveAccount(account);
                    }
                    else
                    {
                        AccountStore.Create().Save(account, AuthenticationHelper.AppName);
                    }
                    #endregion
                }
            }
        }