react-native-keycloak icon indicating copy to clipboard operation
react-native-keycloak copied to clipboard

how can i recover keycloak instance created useKeycloak hooks?

Open khj3132 opened this issue 2 years ago • 3 comments

Hi! First of all, I really appreciate your service. I have a question about maintaining login after app restart.

This is my senario.

  • Login in my app at first, issued an access token & refresh token with keycloak.login().
  • Store an access token & refresh token to local storage with onToken event handler.
  • Use the useKeycloak hooks for getting access token and using keycloak.authenticated, keycloak.tokenparsed, etc.
  • After restarting my app, load an access token & refresh token from local storage

In this senario, when I get keycloak instance from a useKeycloak hooks after restarting my app, there is no access token & refresh token in keycloak instance. I want to use a keycloak instance just like when I first login(not only use stored access token & refresh token). Is there the way initialize keycloak instance including stored access token & refresh token after restarting my app without login? Thank you.

khj3132 avatar Apr 08 '22 02:04 khj3132

Hello. This is peculiar, very peculiar.

I mean, have you tried to print the tokens after the login? Can you see them?

IronTony avatar Apr 08 '22 17:04 IronTony

I have the same problem

nemanjarocks avatar Aug 28 '23 19:08 nemanjarocks

configure this in your App.js file

<ReactNativeKeycloakProvider autoRefreshToken authClient={keycloak} onTokens={tokens => { if (tokens?.token != 'undefined') { AsyncStorage.setItem('Tokens', JSON.stringify(tokens)) } }} initOptions={{ redirectUri: 'ur url', postLogoutRedirectUri: 'your url', inAppBrowserOptions: {}, }}>

useEffect(() => { fetchData(); setTimeout(() => { // navigation.navigate('HomeTabs'); navigation.navigate(keycloak?.authenticated ? 'HomeTabs' : 'AuthStack'); }, 100); }, []);

configure this in your landing Screen

i.e the screen which render as first Screen on DOM

const fetchData = async () => { let tokens = await AsyncStorage.getItem('Tokens'); let finalTokens = JSON.parse(tokens); // console.log('finalTokens', finalTokens); keycloak.init({ refreshToken: finalTokens?.refreshToken, token: finalTokens?.token, idToken: finalTokens?.idToken, redirectUri: 'your url', }); keycloak.onTokenExpired = () => { keycloak .updateToken(5) .then(() => { // console.log('onTokenExpired', 'token updated'); }) .catch(err => { console.log(err); }); }; };

sravanvudem avatar Mar 06 '24 11:03 sravanvudem