Files
helix-web-react/src/service/auth/msal/index.ts
T
2025-12-25 16:12:01 +08:00

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)
}
}