如何在Azure Mobile App中为Xamarin Forms处理用户令牌?

时间:2016-07-15 12:04:46

标签: c# .net authentication xamarin.forms azure-mobile-services

我正在为Azure移动应用程序开发具有.NET背景的Xamarin Forms应用程序。我在客户端遇到了一些问题,我想知道如何处理用户令牌,MobileServiceUser。

我应该如何保留令牌的数据并通过客户端应用程序使用它?

我成功登录了用户。现在,用户移动到另一个页面并尝试检索信息。我创建了一个像" TodoItemManager"对于每个表/对象。所以现在我使用FoodItemManager,但MobileServiceClient的MobileServiceUser为null,因为我使用LoginItemManager记录了用户。所以数据丢失了。我应该为完整的应用程序使用一个管理器来保持MobileServiceUser活着吗?什么是最好的方法?

非常感谢。

2 个答案:

答案 0 :(得分:6)

您应该为整个应用使用单身 MobileServiceClient对象,这将保留所有视图中的登录用户。创建多个客户端对象通常是个坏主意。

如果您还希望在应用程序重新启动时保留用户令牌,则可以使用Xamarin.Auth库,该库将安全地存储令牌。以下是Xamarin.Forms的示例:https://github.com/azure-appservice-samples/ContosoMoments/blob/master/src/Mobile/ContosoMoments/Helpers/AuthStore.cs

答案 1 :(得分:1)

根据您想要实现的目标,有不同的方法和最佳实践。如果用户每次启动应用程序时都应重新进行身份验证,则可以创建一个singleton class来保存身份验证属性。我选择了名称" AzureData"因为你的主题。

示例:

使用System;

public class AzureData
{
   private static AzureDatainstance;

   private AzureData() {}

   public static AzureDataInstance
   {
      get 
      {
         if (instance == null)
         {
            instance = new AzureData();
         }
         return instance;
      }
   }

   public string MobileServiceUser { get; set; }

}

现在,在您确定MobileServiceUser的代码中,执行如下调用:

AzureData.AzureDatainstance.MobileServiceUser = <yourUser>;

然后,您可以访问应用程序中具有AzureData类可见性的每个位置的内容。

如果要以重新启动应用程序的方式存储数据,则需要考虑其他方式来存储数据。根据数据的大小,可以使用每个平台提供的本地存储(例如 NSUserDefaults for iOS),也可以创建文件或使用local database