2016-08-02 74 views
0

我是Xamarin并使用Office365 API的新手。我试图通过创建一个Xamarin.Forms应用程序来从Office365服务器读取数据,一旦用户通过身份验证。如何通过Office 365 API在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中向用户显示例外情况。

相关问题