Custom provider
If you have existing authentication code in your application, you can create a custom provider to enable authentication and access to Microsoft Graph for Microsoft Graph Toolkit components. There are two ways to create custom providers:
- Create a new
SimpleProvider
by passing in a function for getting an access token - Extend the
IProvider
abstract class
This article describes each approach in more detail.
SimpleProvider
Instantiate the SimpleProvider
class by passing in a function that will return an access token for passed-in scopes.
let provider = new SimpleProvider((scopes: string[]) => {
// return a promise with accessToken
});
In addition, you can also provide an optional login
and logout
functions that can handle the sign in and sign out calls from the Login component.
Important
To indicate to the components that they can start calling the Microsoft Graph APIs after a user successfully signs in, you need to call Providers.setState(ProviderState.SignedIn)
. An example of this is shown in the login
function below.
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);
Manage state
For the components to be aware of the state of the provider, you will need to call the provider.setState(state: ProviderState)
method whenever the state changes. For example, when the user has signed in, call provider.setState(ProviderState.SignedIn)
. The ProviderState
enum defines three states, as shown.
export enum ProviderState {
Loading,
SignedOut,
SignedIn
}
IProvider
You can extend the IProvider
abstract class to create your own provider.
State
A provider must keep track of the authentication state and update the components when the state changes. The IProvider
class already implements the onStateChanged(eventHandler)
handler and the state: ProviderState
property. You just need to use the setState(state:ProviderState)
method in your implementation to update the state when it changes. Updating the state will fire the stateChanged
event and update all the components automatically.
Login/Logout
If your provider provides login or logout functionality, implement the login(): Promise<void>
and logout(): Promise<void>
methods. These methods are optional.
Access token
You must implement the getAccessToken({'scopes': scopes[]}) : Promise<string>
method. This method is used to get a valid token before every call to Microsoft Graph.
Graph
The components use the Microsoft Graph Javascript SDK for all calls to Microsoft Graph. Your provider must make the SDK available through the graph
property. In your constructor, create a new Graph
instance, as shown.
this.graph = new Graph(this);
The Graph
class is a light wrapper on top of the Microsoft Graph SDK.
Example
All the providers extend the IProvider
abstract class. For examples, take a look at the source code for any of the existing providers.
Set the global provider
Components use the Providers.globalProvider
property to access a provider. After you create your own provider, set this property to your provider.
import { Providers } from '@microsoft/mgt';
Providers.globalProvider = myProvider;
All the components will be notified of the new provider and start using it.