In this article, I have explained how to get the current user profile properties in your SPFx webpart using Microsoft Graph API
Create a SPFx project with “Webpart” template & choose the framework “React”
![]()
Install the necessary “NPM” packages and am going to use “MSGraphClient” to connect my webpart SPFx with Microsoft Graph API
npm install @microsoft/microsoft-graph-types --save-dev
Microsoft graph types help us to catch the error in your Typescript code faster.
Import the necessary packages in “MyUserInformation.tsx” file under “src\webparts\components”
import * as MicrosoftGraph from '@microsoft/microsoft-graph-types';
Open “IMyUserInformationProps” properties interface import the web part context from sp-webpart-base
import { WebPartContext } from "@microsoft/sp-webpart-base";
Add the “WebPartContext” properties inside the interface the final code look like below
import {WebPartContext } from "@microsoft/sp-webpart-base";
export interface IMyUserInformationProps {
  description: string;
  context: WebPartContext
}
Open “MyUserInformationWebPart.ts” include the context inside render()
public render(): void {
    const element: React.ReactElement<IMyUserInformationProps> = React.createElement(
      MyUserInformation,
      {
        context: this.context,
        description: this.properties.description,       
      }
    );
    ReactDom.render(element, this.domElement);
  }
Create a state interface to hold the data of user profile object
export interface IUserInformationState {
  data: {}
}
Initialize the constructor to declare the props and state
export default class MyEvents extends React.Component<IMyEventsProps, IUserInformationState> { 
  constructor(props: IMyEventsProps) {
    super(props);
      this.state = {
        data: {}
      }
  }
Create a function named “GetMyProfile()” to fetch the current user information
const GetMyProfile = () => {
    this.props.context.msGraphClientFactory.getClient('3').then((client): void => {
      client.api('me').get((error, user: MicrosoftGraph.User, rawResponse?: any) => {
        this.setState({
          data: user
        })
}
In “ComponetDidMount()” pass the created function it will retrieve the user information when page renders
componentDidMount(): void {
    this.GetMyProfile()
  }
Create a child component "UserDetail.tsx" to display user information details. Here I am using parent and child concept in components and send the retrieved data over props
![]()
Include the properties interface in your class component look like below
![]()
Import the UserDetail.tsx child component in to your parent component “MyUserInformation.tsx”
import UserDetail from './UserDetail';
Inside the render() method pass the component and data over props
public render(): React.ReactElement<IMyUserInformationProps> {        
return (
    <UserDetail data={this.state.data}></UserDetail>
    );  
}
Now open the child component “UserDetail.tsx” get the data from the props and render it into your HTML element based on your UI.
![]()
Full code
MyUserInformation.tsx
import * as React from 'react';
import styles from './MyUserInformation.module.scss';
import { IMyUserInformationProps } from './IMyUserInformationProps';
import { escape } from '@microsoft/sp-lodash-subset';
import * as MicrosoftGraph from '@microsoft/microsoft-graph-types';
import UserDetail from './UserDetail';
export interface IUserInformationState {
  data: {}
}
export default class MyUserInformation extends React.Component<IMyUserInformationProps, IUserInformationState> {
  constructor(props: IMyUserInformationProps) {
    super(props)
    this.state = {
      data: {}
    }
  }
  //Connect to Graph API fetch the user information object
  GetMyProfile = () => {
    this.props.context.msGraphClientFactory.getClient('3').then((client): void => {
      client.api('me').get((error, user: MicrosoftGraph.User, rawResponse?: any) => {
        console.log(user)
        if (user) {
          //set the user information object in state property
          this.setState({
            data: user
          })
        }
      })
    })
  }
  componentDidMount(): void {
    this.GetMyProfile()
  }
  public render(): React.ReactElement<IMyUserInformationProps> {
    return (
      <UserDetail data={this.state.data}></UserDetail>
    );
  }
}
UserDetail.tsx
import * as React from 'react';
export interface IUserInformationProps {
    data: any
  }
class UserDetail extends React.Component <IUserInformationProps> {
    constructor(props: IUserInformationProps){
        super(props)
    }
    render() {
        return (
            <div>
              <p style={{fontWeight: "bold"}}>My User Information:</p>
              <li>
              <i>{this.props.data.mail} </i></li>
              <li><i>{this.props.data.displayName} </i></li>              
              <li><i>{this.props.data.businessPhones} </i></li>             
            </div>
        );
    }
}
export default UserDetail;
Before running the webpart include the below permission scopes inside your package-solution.json, You can include multiple permission scopes based on your application requirement
"webApiPermissionRequests": [
      {
        "resource": "Microsoft Graph",
        "scope": "User.Read.All"
      }],
After a successful deployment of your webpart, Open SharePoint admin center choose “Advanced -> API Access” from left navigation window.
![]()
Approve your permission scope “User.Read.All” is displayed on “Pending requests”
![]()
Hit “Gulp Serve” and run the webpart
![]()