react-native-keycloak
react-native-keycloak copied to clipboard
how can i recover keycloak instance created useKeycloak hooks?
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.
Hello. This is peculiar, very peculiar.
I mean, have you tried to print the tokens after the login? Can you see them?
I have the same problem
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); }); }; };