🏸
MSAL & Reactでログイン処理するも、BrowserAuthError: hash_empty_error
環境
create-react-app 4.0.3
@azure/msal-browser: ^2.20.0
@azure/msal-react: ^1.1.2
現象
公式を参考に、ポップアップによるログイン処理を実装
// MSAL configuration
const configuration: Configuration = {
auth: {
clientId,
authority: `https://login.microsoftonline.com/...`,
},
}
export const pca = new PublicClientApplication(configuration)
...
<Button
fullWidth
variant="contained"
size="large"
sx={{ mt: 3, mb: 2 }}
onClick={() => {
pca
.loginPopup({
prompt: 'select_account',
scopes,
})
.then((r) => {
// 上手く行ったときの処理
})
}}
>
Login
</Button>
ログインは時々成功するも、大抵以下のエラーとなる。
SessionStorage, Cookieに何かあるといったわけでもない。時々うまくいくのが本当に困る。。。
BrowserAuthError: hash_empty_error: Hash value cannot be processed because it is empty.
Please verify that your redirectUri is not clearing the hash.
Given Url: https://siteinspection-dev.azurewebsites.net/login
at t [as constructor] (https://siteinspection-dev.azurewebsites.net/static/js/6.21bce126.chunk.js:2:163177)
at new t (https://siteinspection-dev.azurewebsites.net/static/js/6.21bce126.chunk.js:2:266493)
at Function.t.createEmptyHashError (https://siteinspection-dev.azurewebsites.net/static/js/6.21bce126.chunk.js:2:266991)
at https://siteinspection-dev.azurewebsites.net/static/js/6.21bce126.chunk.js:2:304999
stackOverFlowなどみてもあまり有益な情報がなく、途方にくれる
解決策
loginRedirect()を使う
onClick={() => {
pca
// .loginPopup
.loginRedirect({
prompt: 'select_account',
scopes,
})
どうやらloginPopupには潜在的な問題がある気配。
注意点
loginPopupとloginRedirectでは、以下のようにPromiseで返される返り値が異なる。
loginPopup | loginRedirect |
---|---|
Promise<AuthenticateResult> | Promise<void> |
AuthenticateResultを元に色々処理していた場合は、ロジックを変える必要がある。
(T_T)
Discussion