使用 redux 在 react-native 应用程序中保存访问令牌的最佳实践是啥?

Posted

技术标签:

【中文标题】使用 redux 在 react-native 应用程序中保存访问令牌的最佳实践是啥?【英文标题】:What is the best practice to save access token in react-native app with redux?使用 redux 在 react-native 应用程序中保存访问令牌的最佳实践是什么? 【发布时间】:2018-01-13 02:58:12 【问题描述】:

使用 redux 在 react-native 应用程序中保存访问令牌的最佳做法是什么?

在 Redux 中,我曾经保存整个凭证,包括一些用户信息到状态:

//Actions
export const successfulLogin = (firebaseAuth) => (
    type: 'LOGIN_SUCCESSFUL',
    firebaseAuth
);

//Reducer
const authentication = (state = , action) => 
    switch (action.type) 
        case 'LOGIN_SUCCESSFUL':
            return 
                ...state,
                firebaseAuth: action.firebaseAuth
            ;
        default:
            return state;
    

export default authentication

之后,我发现了一个新模块redux-persist,它可以帮助我将状态保存到设备存储中,localStorage。但是,商店中的所有内容都将被保存。使用 redux-persist 保存访问令牌是一种好习惯吗?

如果没有,我应该使用什么?

【问题讨论】:

【参考方案1】:

这个问题被问到已经有一段时间了,但是使用 redux-persist 你不需要保存整个商店。您可以提供要存储的密钥,它将忽略您未指定的密钥。

【讨论】:

【参考方案2】:

我认为您所描述的内容可行,但是如果您只需要一个访问令牌,则保存整个商店有点过头了。因此,我会说最好的做法是用一些代码来完成你所需要的。

作为使用 redux-persist 的替代方法,您可以自己处理这个副作用:

    redux'createStore 被调用时从localStorage 中读取访问令牌,并将其传递到预加载状态。或者.. 稍后发送类似 SET_ACCESS_TOKEN 的操作以将令牌添加到 redux 存储区。 要在成功登录后立即保存令牌,您可以在相应的异步操作创建器中触发副作用(调用负责向 localStorage 写入内容的模块)。

就是这样,不需要额外的模块。

【讨论】:

以上是关于使用 redux 在 react-native 应用程序中保存访问令牌的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 redux 在 react-native 应用程序中保存访问令牌的最佳实践是啥?

如何使用 redux 让根组件在 react-native 中重新渲染(开源项目)

我无法在带有 redux 的 react-native 中使用地理定位

使用 react-redux 与 react-native 连接时的不变违规

如何在 App.js (React-Native) 中访问 redux 状态

如何在react-native 中优雅的使用 redux