自定义提供程序
如果应用程序中已有身份验证代码,则可以创建自定义提供程序来启用对 Microsoft Graph 工具包组件的身份验证和访问。 可通过两种方法创建自定义提供程序:
- 通过传入用于获取访问令牌的函数来创建新的
SimpleProvider
-
IProvider
扩展抽象类
本文更详细地介绍了每种方法。
通过传入将返回传入范围的访问令牌的函数来实例化 SimpleProvider
类。
let provider = new SimpleProvider((scopes: string[]) => {
// return a promise with accessToken
});
此外,还可以提供可选的 login
和 logout
函数,用于处理登录和 登录组件中的 注销调用。
重要
若要向组件指示他们可以在用户成功登录后开始调用 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
已实现 onStateChanged(eventHandler)
处理程序和 state: ProviderState
属性。 只需在实现中使用 setState(state:ProviderState)
方法,即可在更改时更新状态。 更新状态将触发 事件 stateChanged
并自动更新所有组件。
如果提供程序提供登录或注销功能,请实现 login(): Promise<void>
和 logout(): Promise<void>
方法。 这些方法是可选的。
必须实现 getAccessToken({'scopes': scopes[]}) : Promise<string>
方法。 此方法用于在每次调用 Microsoft 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;
所有组件都将收到有关新提供程序的通知,并开始使用它。