自定义提供程序

如果应用程序中已有身份验证代码,则可以创建自定义提供程序来启用对 Microsoft Graph 工具包组件的身份验证和访问。 可通过两种方法创建自定义提供程序:

  • 通过传入用于获取访问令牌的函数来创建新的SimpleProvider
  • IProvider扩展抽象类

本文更详细地介绍了每种方法。

SimpleProvider

通过传入将返回传入范围的访问令牌的函数来实例化 SimpleProvider 类。

let provider = new SimpleProvider((scopes: string[]) => {
  // return a promise with accessToken
});

此外,还可以提供可选的 loginlogout 函数,用于处理登录和 登录组件中的 注销调用。

重要

若要向组件指示他们可以在用户成功登录后开始调用 Microsoft Graph API,需要调用 Providers.setState(ProviderState.SignedIn)。 下面的函数中 login 显示了一个示例。

function getAccessToken(scopes: string[]) {
  // return a promise with accessToken string
}

function login() {
  //login code
  Providers.globalProvider.setState(ProviderState.SignedIn)
}

function logout() {
  // logout code
}

let provider = new SimpleProvider(getAccessToken, login, logout);

管理状态

若要使组件了解提供程序的状态,需要每当状态更改时调用 provider.setState(state: ProviderState) 方法。 例如,当用户登录后,请调用 provider.setState(ProviderState.SignedIn)。 枚举 ProviderState 定义了三种状态,如下所示。

export enum ProviderState {
  Loading,
  SignedOut,
  SignedIn
}

IProvider

可以扩展 IProvider 抽象类以创建自己的提供程序。

状态

提供程序必须跟踪身份验证状态,并在状态更改时更新组件。 类 IProvider 已实现 onStateChanged(eventHandler) 处理程序和 state: ProviderState 属性。 只需在实现中使用 setState(state:ProviderState) 方法,即可在更改时更新状态。 更新状态将触发 事件 stateChanged 并自动更新所有组件。

登录/注销

如果提供程序提供登录或注销功能,请实现 login(): Promise<void>logout(): Promise<void> 方法。 这些方法是可选的。

访问令牌

必须实现 getAccessToken({'scopes': scopes[]}) : Promise<string> 方法。 此方法用于在每次调用 Microsoft Graph 之前获取有效令牌。

Graph

组件使用 Microsoft Graph Javascript SDK 进行对 Microsoft Graph 的所有调用。 提供程序必须通过 graph 属性提供 SDK。 在构造函数中,创建一个新 Graph 实例,如下所示。

this.graph = new Graph(this);

Graph 是 Microsoft Graph SDK 顶部的轻型包装器。

示例

所有提供程序都扩展了 IProvider 抽象类。 有关示例,请查看任何 现有提供程序的源代码。

设置全局提供程序

组件使用 Providers.globalProvider 属性访问提供程序。 创建自己的提供程序后,将此属性设置为提供程序。

import { Providers } from '@microsoft/mgt';

Providers.globalProvider = myProvider;

所有组件都将收到有关新提供程序的通知,并开始使用它。