【问题标题】:Should I check the AsyncStorage token value against a key in expo react native?我应该根据 expo react native 中的键检查 AsyncStorage 令牌值吗?
【发布时间】:2021-01-26 04:45:55
【问题描述】:

我是本地反应新手,我正在尝试使用 expo cli 为我的应用程序构建身份验证系统。我想我现在已经大致理解了,但是我读过的所有文章似乎都说您应该检查 AsyncStorage 中是否存在用户令牌,如果存在则将用户带到主页/帐户页面并跳过登录,但是令牌永远不会与特殊密钥或任何东西进行比较。这是它说要在文章中返回的代码示例...

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 是否存在以及它是否确实将其发送到后端进行验证,然后返回用户数据,如下面的代码所示,如这就是我为使用 react 的网站版本所做的,如果 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>
  );

希望这个例子有意义,我也会使用 'useContext' 将 userData 传递给组件。

【问题讨论】:

    标签: react-native expo asyncstorage


    【解决方案1】:

    是的,如果您想更加严格,您应该检查一下。非 root 设备无法读取或写入 AsyncStorage 存储的数据,但 root 设备可以。检查这个https://medium.com/dev-genius/security-in-react-native-applications-asyncstorage-4a619d923638

    但是使用服务器验证用户令牌会增加应用打开交易。相反,我建议使用其他加密存储技术。

    【讨论】:

    • 谢谢,但如果我无论如何都需要获取最新的用户数据,我是否最好在数据库中比较它并将结果与​​用户数据一起返回。我知道有安全存储之类的东西,但这不会给我用户数据
    • 在这种情况下,我认为可以通过服务器验证。但是,如果您为所有设备的每个用户存储相同的用户令牌,则可能存在安全问题,因为根设备可以读取该用户令牌,因此请确保您安全地存储令牌。
    • 用户令牌将是随机生成的,并且对每个用户都是唯一的,然后它们将在后端使用密钥进行验证
    • 是的,但也确保每个用户每台设备的唯一性
    猜你喜欢
    • 2022-12-22
    • 2022-11-24
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多