如何通过 Office365 API 在 Xamarin.forms 中存储身份验证状态
How to store authenticated state through Office365 API in Xamarin.forms
我是 Xamarin 新手,正在使用 Office365 API。我正在尝试通过创建一个 Xamarin.Forms 应用程序来学习,该应用程序在用户通过身份验证后从 Office365 服务器读取数据。
我一直在学习教程并最终得到以下登录页面
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 任务,但这是我让它工作的唯一方法。如何存储用户已经通过身份验证的信息并访问他们的用户名?
我已经阅读了所有可能的资料,但关于这个主题的信息似乎太过广泛了。
对于最简单的实现,您可以在 App.cs 或 App.xaml.cs 中创建一个 public 静态 属性,例如:
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";
}
}
另外,你的login方法中,finally显示主页面好像不太对,因为即使发生异常finally也会被执行。我建议您将 await Navigation.PushAsync(new MainTab());
移动到 try
并在 catch
中向用户显示异常。
我是 Xamarin 新手,正在使用 Office365 API。我正在尝试通过创建一个 Xamarin.Forms 应用程序来学习,该应用程序在用户通过身份验证后从 Office365 服务器读取数据。
我一直在学习教程并最终得到以下登录页面
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 任务,但这是我让它工作的唯一方法。如何存储用户已经通过身份验证的信息并访问他们的用户名?
我已经阅读了所有可能的资料,但关于这个主题的信息似乎太过广泛了。
对于最简单的实现,您可以在 App.cs 或 App.xaml.cs 中创建一个 public 静态 属性,例如:
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";
}
}
另外,你的login方法中,finally显示主页面好像不太对,因为即使发生异常finally也会被执行。我建议您将 await Navigation.PushAsync(new MainTab());
移动到 try
并在 catch
中向用户显示异常。