2016-08-02 3 views
0

Я новичок в Xamarin и использую API Office365. Я пытаюсь узнать, создав приложение Xamarin.Forms, которое считывает данные с сервера Office365 после аутентификации пользователя.Как хранить аутентифицированное состояние через API Office365 в Xamarin.forms

Я следовал учебник и в конечном итоге со следующей страницы входа

namespace CMLender.Pages 
{ 
    public partial class Login 
    { 
     public IPlatformParameters PlatformParameters { get; set; } 
     public Login() 
     { 
      InitializeComponent(); 
      LoginButton.Clicked += LoginButton_Clicked; 
     } 
     protected override void OnAppearing() 
     { 
      App.ClientApplication.PlatformParameters = PlatformParameters; 
      base.OnAppearing(); 
     } 
     private async void LoginButton_Clicked(object sender, EventArgs e) 
     { 
      try 
      { 
       AuthenticationResult ar = await App.ClientApplication.AcquireTokenAsync(App.Scopes); 
      } 
      catch (MsalException ex) 
      { 
       WelcomeText.Text = ex.Message; 
      } 
      finally 
      { 
       await Navigation.PushAsync(new MainTab()); 
      } 
     } 
    } 
} 

После того как пользователь нажмет на кнопку входа, они принимаются через на страницу аутентификации пользователя Office365. После того, как они вошли в систему с действительным именем пользователя и паролем, приложение затем загружает страницу MainTab XAML.

Теперь вот где начинается моя проблема. Моя страница MainTab выглядит следующим образом:

namespace CMLender.Pages 
{ 

    public partial class MainTab : ContentPage 
    { 
     public MainTab() 
     { 
      InitializeComponent(); 
      DisplayMessage(); 
     } 
     private async void DisplayMessage() 
     { 
      try 
      { 
       AuthenticationResult ar = await App.ClientApplication.AcquireTokenAsync(App.Scopes); 
       WelcomeText.Text = $"Welcome {ar.User.Name}"; 
      } 
      catch (MsalException ex) 
      { 
       WelcomeText.Text = ex.Message; 
      } 
      finally 
      { 
       WelcomeTextTwo.Text = "BlaBlaBlab"; 
      } 
     } 

    } 
} 

Я хотел эту страницу, чтобы написать вошедшую в имени пользователей к метке (что он делает), но первый пользователь должен повторно проверка подлинности.

Я уверен, что дело доходит до задачи AcquireTokenAsync, но это единственный способ заставить его работать. Как я могу сохранить информацию о том, что пользователь уже прошел аутентификацию и получить доступ к имени пользователя?

Я сделал все чтение, которое я могу, но информация просто кажется настолько широким и широким в этом вопросе.

ответ

1

Для наиболее упрощенным impllementation вы можете создать общественное статическое свойство в вас App.cs или App.xaml.cs нравится:

public static AuthenticationResult LoggedInUser { get; set; } 

В вашей странице входа добавьте в ваш логин события нажатия кнопки:

private async void LoginButton_Clicked(object sender, EventArgs e) 
{ 
     try 
     { 
      AuthenticationResult ar = await App.ClientApplication.AcquireTokenAsync(App.Scopes); 
      App.LoggedInUser = ar; 
     } 
     catch (MsalException ex) 
     { 
      WelcomeText.Text = ex.Message; 
     } 
     finally 
     { 
      await Navigation.PushAsync(new MainTab()); 
     } 
} 

И в вас главной странице, получить данные из статического свойства вместо повторного вызова API:

 private async void DisplayMessage() 
     { 
      try 
      {      
       WelcomeText.Text = $"Welcome {App.LoggedInUser.User.Name}"; 
      } 
      catch (MsalException ex) 
      { 
       WelcomeText.Text = ex.Message; 
      } 
      finally 
      { 
       WelcomeTextTwo.Text = "BlaBlaBlab"; 
      } 
     } 

Кроме того, в вашем методе входа в систему, похоже, не представляется правдоподобным показать главную страницу, потому что даже если произойдет исключение, наконец, будет выполнено. Я предлагаю вам переместить await Navigation.PushAsync(new MainTab()); в try и показать исключение для пользователя в catch.