Right way to use JWT auth token in React Redux app

时间:2017-08-30 20:51:05

标签: javascript reactjs redux react-redux jwt

I am using JWT for my React Redux app auth, also I have a plenty services that need my secret token. I am saving JWT token in cookies, as well as in coalesce object of my unknown reducer. So every time I need to do request I am passing secret with =IF(ISBLANK('Sheet2'!A1),"",'Sheet2'!A1)

like this

user

this is my service

common

so I am interested what is right way to access JWT token, from redux store like I am doing or from cookies directly from service?

2 个答案:

答案 0 :(得分:1)

这就是Redux Middleware的用武之地 - 基本上它是处理更复杂类型操作的一种方式。最常用的中间件是redux-thunk(https://github.com/gaearon/redux-thunk),它允许您调度有权访问redux状态的函数。因此,使用redux-thunk,您可以将您的秘密存储在redux中并执行此操作:

const requestDataAction = () => ( dispatch, getState ) => {
    const secret = getState().user.secret;
    getAdminData( secret ).then( adminData => {
         dispatch({ type: "UPDATE_ADMIN_DATA", adminData });
    });
};

这是一个返回函数的函数,这有点令人困惑,但它确实有意义。外部函数是您从React组件调用的函数(在使用mapPropsToDispatch连接之后)。内部的是由中间件处理的thunk,它为你注入dispatch和getState函数。

这样做的好处是你不需要你的秘密"在你的React组件中成为一个道具,因为它从未用于渲染任何东西,它只是在动作中使用过,

答案 1 :(得分:0)

使用axios,您可以在加载服务文件时创建新实例。因此,您将导出此实例,如下所示:

C13=C13+F13

然后在同一个文件中,您可以导出一个函数来设置用户令牌:

export const fetch = axios.create({
  baseURL: [YOUR SERVICE BASE URL]
})

因此,您可以在任何地方调用服务:

export function setUserSecret (secret) {
  fetch.defaults.params['secret'] = secret
}