You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

authPersistor.js 3.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import AsyncStorage from '@react-native-async-storage/async-storage';
  2. import { batchActions } from 'redux-batched-actions';
  3. import { authLoaded, setRefreshToken, setToken, setUsername } from './actions'
  4. // AsyncStorage.getAllKeys()
  5. // .then((keys) => AsyncStorage.multiGet(keys)
  6. // .then((data) => console.log(data)));
  7. async function safeSetStorage(key, value) {
  8. if (value) {
  9. await AsyncStorage.setItem(key, value)
  10. }
  11. else {
  12. await AsyncStorage.removeItem(key)
  13. }
  14. }
  15. const accessTokenKey = 'userToken'
  16. const refreshTokenKey = 'refreshToken'
  17. const userNameKey = 'userName'
  18. function subscibeOnAuthChanges(store) {
  19. let lastAccessToken = store.getState().user.token;
  20. let lastRefreshToken = store.getState().user.refreshToken;
  21. let lastUsername = store.getState().user.username;
  22. // console.log("In subscribe function", lastAccessToken, lastRefreshToken, lastUsername)
  23. store.subscribe(async () => {
  24. const state = store.getState();
  25. // console.log("In subscribe...")
  26. const newAccessToken = state.user.token;
  27. const newRefreshToken = state.user.refreshToken;
  28. const newUsername = state.user.username;
  29. // console.log("In subscribe", newAccessToken, newRefreshToken, newUsername)
  30. if (lastAccessToken !== newAccessToken) {
  31. lastAccessToken = newAccessToken
  32. await safeSetStorage(accessTokenKey, newAccessToken)
  33. }
  34. if (lastRefreshToken !== newRefreshToken) {
  35. lastRefreshToken = newRefreshToken
  36. await safeSetStorage(refreshTokenKey, newRefreshToken)
  37. }
  38. if (lastUsername !== newUsername) {
  39. lastUsername = newUsername
  40. await safeSetStorage(userNameKey, newUsername)
  41. }
  42. })
  43. }
  44. async function loadFromStorage(store) {
  45. try {
  46. // leave comments this for testing
  47. // console.log("getting Token from storage");
  48. // await AsyncStorage.setItem(accessTokenKey, "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4MmVlNjNkMi0yZDRjLTRkZjQtYTQ0MS1hZWRkZjhiNGEwMmYiLCJzdWIiOiJpbGlqYSt1Y2lAcHJvZml0b3B0aWNzLmNvbSIsInVuaXF1ZV9uYW1lIjoiaWxpamErdWNpQHByb2ZpdG9wdGljcy5jb20iLCJVdGNPZmZzZXRNaW51dGVzIjoiLTI0MCIsIkFncmVlbWVudEFjY2VwdGVkIjoiVHJ1ZSIsIk9yZ2FuaXphdGlvbklkIjoiMTkiLCJPcmdhbml6YXRpb25Ib3N0bmFtZSI6Im15c3RyYXRhZGV2Mi5wcm9maXRvcHRpY3MuY29tIiwibmJmIjoxNjE2Njk0NTI2LCJleHAiOjE2MTY2OTYzMjYsImlzcyI6InN0cmF0YWNsZWFyLmNvbSIsImF1ZCI6IkNsaWVudCJ9.kk0TQENidNJfQpkLy6uVUZULHp1r46gA7IyhAMHkqsI");
  49. userToken = await AsyncStorage.getItem(accessTokenKey);
  50. // leave this for testing
  51. // await AsyncStorage.setItem(refreshTokenKey, "IBFRYNvviwI0+C3CVy1sViQlvFDTXsTUZWa8fgzv6oLQtYTng3A+8xc4gMqpX+y1lR8WIhN4uDlEV19uu+prWEVpi8qkjp999Li0t+eiEoe7OdeK+vQwecowvvJZRt1WK/Qb3biMC76IhElZta/riy2yZ9jQRBhiEfPs+yK+GJI=");
  52. // await AsyncStorage.setItem(refreshTokenKey, "TV+VsT+Qwb9hh1oi8mG4CBX0gnN9y9aNfXT/QUPZsPwCJ3n1svOO/KwT14Z5UZxhU+8h5ocuvipj4dIGDJa7wJHkV7j5/mBKfSgVqMvX43VdFXkp19Dg0h4Tg9Elh6GpR0N6FSCDJl3igv83W3OpC4UWXylQKW+0gr+tjOPmT78=");
  53. refreshToken = await AsyncStorage.getItem(refreshTokenKey);
  54. // leave this for testing
  55. // await AsyncStorage.setItem(userNameKey, "ilija+uci@profitoptics.com");
  56. userName = await AsyncStorage.getItem(userNameKey);
  57. // console.log('Loaded from storage', userToken)
  58. store.dispatch(batchActions([setToken(userToken), setRefreshToken(refreshToken), setUsername(userName), authLoaded()]))
  59. } catch (eror) {
  60. console.error("There was an error getting token from storage", eror);
  61. }
  62. }
  63. function init(store) {
  64. loadFromStorage(store)
  65. .then(() => subscibeOnAuthChanges(store))
  66. }
  67. export { init };