Должен ли я сравнивать значение токена AsyncStorage с ключом в expo react native?

Я новичок, чтобы реагировать на родной язык, и я пытаюсь создать систему аутентификации для своего приложения с помощью expo cli. Я думаю, что теперь я понимаю это в целом, но все статьи, которые я прочитал, похоже, говорят, что вы должны проверить, существует ли токен пользователя в AsyncStorage, и если он есть, затем перенаправить пользователя на страницу Home / Account и пропустить вход в систему, но токен никогда не сравнивается со специальным ключом или чем-то еще. Вот пример кода, который нужно вернуть в статьях ...

return (
    <AuthContext.Provider value={authContext}>
      <Stack.Navigator>
        {state.userToken == null ? (
          <Stack.Screen name="SignIn" component={SignInScreen} />
        ) : (
          <Stack.Screen name="Home" component={HomeScreen} />
        )}
      </Stack.Navigator>
    </AuthContext.Provider>
  )

Я создаю приложение с ежемесячным членским взносом, поэтому мне нужно проверить, существует ли userToken и действительно ли он отправляет его на серверную часть для проверки, а затем возвращать данные пользователя, как в приведенном ниже коде, так как это то, что Я сделал это для версии веб-сайта, которая использовала реакцию, и если userToken не существует, я просто отправляю их на страницу входа?

const [isAuthenticated, setIsAuthenticated] = useState(false)
const [userData, setUserData] = useState(null)

const handleUserToken = () => {
  // fetch call that sends userToken to be validated and returns {userData, isAuthenticated}
  setSomeState(userData)

  return isAuthenticated
}

state.userToken == setIsAuthenticated(false) ? setIsAuthenticated(handleUserToken())

return (
    <AuthContext.Provider value={authContext}>
      <Stack.Navigator>
        {!state.isAuthenticated ? (
          <Stack.Screen name="SignIn" component={SignInScreen} />
        ) : (
          <Stack.Screen name="Home" component={HomeScreen} />
        )}
      </Stack.Navigator>
    </AuthContext.Provider>
  );

Надеюсь, этот пример имеет смысл, я бы передал userData компонентам, используя также useContext.


person willmahon    schedule 26.01.2021    source источник


Ответы (1)


Да, если вы хотите ввести более строгие ограничения, вам следует проверить. Некорневое устройство не может читать или записывать данные, хранящиеся в AsyncStorage, но рутированные устройства могут. Проверьте это https://medium.com/dev-genius/security-in-react-native-applications-asyncstorage-4a619d923638

Но проверка токена пользователя на сервере значительно увеличивает время открытия приложения. Вместо этого я рекомендую использовать другие методы зашифрованного хранения.

person Sriteja Sugoor    schedule 26.01.2021
comment
Спасибо, но если мне все равно нужно получить самые свежие пользовательские данные, мне лучше не просто сравнить их в базе данных и вернуть результат вместе с пользовательскими данными. Я знаю, что есть такие вещи, как безопасное хранилище, но это все равно не даст мне пользовательских данных - person willmahon; 26.01.2021
comment
В этом случае я думаю, что это нормально для проверки с сервером. Но если вы храните один и тот же токен пользователя для каждого пользователя для всех устройств, тогда может возникнуть проблема с безопасностью, потому что корневые устройства могут читать этот токен пользователя, поэтому убедитесь, что вы храните свои токены в безопасности. - person Sriteja Sugoor; 26.01.2021
comment
Токены пользователей будут сгенерированы случайным образом и уникальны для каждого пользователя, а затем они будут проверены на бэкэнде с помощью ключа. - person willmahon; 26.01.2021
comment
Да, но также обеспечьте уникальность для каждого пользователя и устройства - person Sriteja Sugoor; 26.01.2021