@@ -189,23 +189,44 @@ export const AuthProvider: React.FC<AuthProviderProps> = ({ children }) => {
189
189
if ( ! checkRoute ) {
190
190
throw new Error ( "could not get user roles!" ) ;
191
191
}
192
- const accountsLocal = instance . getAllAccounts ( ) ;
193
- if ( accountsLocal . length > 0 ) {
194
- instance . setActiveAccount ( accountsLocal [ 0 ] ) ;
195
- const api = useApi ( "core" ) ;
196
- const result = await api . get ( checkRoute ) ;
197
- await setCachedResponse ( "core" , checkRoute , result . data ) ;
198
- setIsLoggedIn ( true ) ;
192
+
193
+ const accounts = instance . getAllAccounts ( ) ;
194
+ const request = {
195
+ scopes : [ "openid" , "profile" , "email" ] ,
196
+ state : returnTo ,
197
+ } ;
198
+
199
+ if ( accounts . length > 0 ) {
200
+ instance . setActiveAccount ( accounts [ 0 ] ) ;
201
+ try {
202
+ await instance . acquireTokenSilent ( {
203
+ ...request ,
204
+ account : accounts [ 0 ] ,
205
+ } ) ;
206
+ const api = useApi ( "core" ) ;
207
+ const result = await api . get ( checkRoute ) ;
208
+ await setCachedResponse ( "core" , checkRoute , result . data ) ;
209
+ setIsLoggedIn ( true ) ;
210
+ } catch ( error ) {
211
+ if ( error instanceof InteractionRequiredAuthError ) {
212
+ await instance . loginRedirect ( {
213
+ ...request ,
214
+ redirectUri : `${ window . location . origin } /auth/callback` ,
215
+ } ) ;
216
+ } else {
217
+ throw error ;
218
+ }
219
+ }
199
220
} else {
200
221
await instance . loginRedirect ( {
201
- scopes : [ "openid" , "profile" , "email" ] ,
202
- state : returnTo ,
222
+ ...request ,
203
223
redirectUri : `${ window . location . origin } /auth/callback` ,
204
224
} ) ;
205
225
}
206
226
} ,
207
- [ instance ] ,
227
+ [ instance , checkRoute , setIsLoggedIn , setCachedResponse ] ,
208
228
) ;
229
+
209
230
const setLoginStatus = useCallback ( ( val : boolean ) => {
210
231
setIsLoggedIn ( val ) ;
211
232
} , [ ] ) ;
0 commit comments