30 lines
858 B
TypeScript
30 lines
858 B
TypeScript
import type { IPublicClientApplication } from "@azure/msal-browser"
|
|
import * as AuthApi from "@/api/auth"
|
|
import type { AppDispatch } from "@/store"
|
|
import { loginSuccess } from "@/store/auth-slice"
|
|
|
|
/**
|
|
* Login with Microsoft Entra ID.
|
|
*
|
|
* @param instance Microsoft Entra ID application instance
|
|
* @param dispatch app dispatcher
|
|
* @param onSuccess callback when login succeeded
|
|
*/
|
|
export async function doMsalLogin(
|
|
instance: IPublicClientApplication,
|
|
dispatch: AppDispatch,
|
|
onSuccess?: () => void
|
|
) {
|
|
try {
|
|
const response = await instance.loginPopup({
|
|
scopes: ["openid", "profile", "email"],
|
|
})
|
|
|
|
const { accessToken, user } = await AuthApi.msalLogin(response.idToken)
|
|
dispatch(loginSuccess({ user, token: accessToken }))
|
|
if (onSuccess) onSuccess()
|
|
} catch (err) {
|
|
console.error("MSAL login failed", err)
|
|
}
|
|
}
|