This is a fork of ak1394's React-Native-Login module. It's a version that I'm planning to maintenance more than it's been with ak1394.
npm i --save react-native-login-keycloak
Please configure Linking module, including steps for handling Universal links (This might get changed due to not being able to close the tab on leave, ending up with a lot of tabs in the browser).
Also, add the applinks: entry to the Associated Domains Capability of your app.
import Login from 'react-native-login-keycloak';
const gatheredTokens = await Login.getTokens();
console.log(gatheredTokens);
// Prints:
//
// { access_token: '...', refresh_token: '...', id_token: '...', ...}
// OR
// undefined
const config = {
url: 'https://<KEYCLOAK_HOST>/auth',
realm: '<REALM NAME>',
clientId: '<CLIENT ID>',
redirectUri: 'https://<REDIRECT HOST>/success.html',
appsiteUri: 'https://<APPSITE HOST>/app.html',
kcIdpHint: 'facebook', // *optional*
};
Login.startLoginProcess(config).then(tokens => {
console.log(tokens);
});
// Prints:
//
// { access_token: '...', refresh_token: '...', id_token: '...', ...}
Logging in by the startLoginProcess function will save it in the AsyncStorage, whereas after its been successful, getTokens will get the most recent tokens that are saved and you can then use it to authenticate against a backend.
const refreshedTokens = await Login.refreshToken();
console.log(refreshTokens);
// Prints:
//
// { access_token: '...', refresh_token: '...', id_token: '...', ...}
// OR
// undefined
const loggedInUser = await Login.retrieveUserInfo();
console.log(loggedInUser);
// Prints:
//
// { sub: '...',name: '... ',preferred_username: '...',given_name: '...' }
// OR
// undefined
Login.logoutKc();
Removes stored tokens. Will also do a Keycloak call to log the user out. Returns true on logout, else false. Subsequent calls to Login.tokens() will return null.
If you got any improvements feel free to make a pull request or suggestion.