ReactJS: How to implement react-cookie properly in an action?












1














I have read articles that saving the token in localstorage is dangerous to XSS attack. So I have decided to store my tokens in cookies. And I am using react-cookie. I saw the examples and I am trying to do it but my auth.js consists of const and is not a class, so I do not know how to use the withCookies() with it, this is my auth.js where I want to store the token to the cookies:



import {
LOGIN,
LOGIN_SUCCESS,
LOGIN_FAILED,

GET_USER_DATA,
GET_USER_DATA_SUCCESS,
GET_USER_DATA_FAILED,

LOGOUT,
LOGOUT_SUCCESS,
LOGOUT_FAILED,
} from './types'

import axios from 'axios'
var api = require ('./../api.js');


export const login = (email, pass) => {
return (dispatch) => {
dispatch({
type: LOGIN
})
var url = api.logInApi
axios.post(url, {
email: email,
password: pass
})
.then(res => {
dispatch({
type: LOGIN_SUCCESS,
payload: res.data
})
localStorage.setItem('token', res.data.token)
dispatch(getUserData())
})
.catch(err => dispatch({
type: LOGIN_FAILED,
payload: err
}))
}
}



export const getUserData = () => {
return (dispatch) => {
dispatch({
type: GET_USER_DATA
})
var url = api.getUserDataApi
axios.post(url, {}, {headers: {
"Authorization": `Bearer ${localStorage.getItem("token")}`
}})
.then(res => {
dispatch({
type: GET_USER_DATA_SUCCESS,
payload: res.data
})
})
.catch(err => dispatch({
type: GET_USER_DATA_FAILED,
payload: err
}))
}
}


export const logout = () => {
return (dispatch) => {
dispatch({
type: LOGOUT
})
var url = api.logoutApi
axios.post(url, {}, {headers: {
"Authorization": `Bearer ${localStorage.getItem("token")}`
}})
.then(res => {
window.location.replace("")
dispatch({
type: LOGOUT_SUCCESS,
payload: res.data
})
})
.catch(err => dispatch({
type: LOGOUT_FAILED,
payload: err
}))
}
}


Now, I tried doing this and of course it doesn't work:



import {
LOGIN,
LOGIN_SUCCESS,
LOGIN_FAILED,

GET_USER_DATA,
GET_USER_DATA_SUCCESS,
GET_USER_DATA_FAILED,

LOGOUT,
LOGOUT_SUCCESS,
LOGOUT_FAILED,
} from './types'

import axios from 'axios'
import { withCookies, Cookies } from 'react-cookie'; <<added this
var api = require ('./../api.js');

const login = (email, pass) => {
return (dispatch) => {
dispatch({
type: LOGIN
})
const { cookies } = props; <<added this
var url = api.logInApi
axios.post(url, {
email: email,
password: pass
})
.then(res => {
dispatch({
type: LOGIN_SUCCESS,
payload: res.data
})
cookies.set('token', res.data.token, { path: '/' }); <<added this
dispatch(getUserData())
})
.catch(err => dispatch({
type: LOGIN_FAILED,
payload: err
}))
}
}
export default withCookies(login) <<added this(wrong)



const getUserData = () => {
return (dispatch) => {
dispatch({
type: GET_USER_DATA
})
const { cookies } = props; <<added this
var token = cookies.get('token'); <<added this
var url = api.getUserDataApi
axios.post(url, {}, {headers: {
"Authorization": `Bearer ${token}` <<added this(this is where I wanna get the cookie)
}})
.then(res => {
dispatch({
type: GET_USER_DATA_SUCCESS,
payload: res.data
})
})
.catch(err => dispatch({
type: GET_USER_DATA_FAILED,
payload: err
}))
}
}
export default withCookies(getUserData) <<added this(wrong)


const logout = () => {
return (dispatch) => {
dispatch({
type: LOGOUT
})
const { cookies } = props;
var token = cookies.get('token');
var url = api.logoutApi
axios.post(url, {}, {headers: {
"Authorization": `Bearer ${token}` <<added this
}})
.then(res => {
window.location.replace("")
dispatch({
type: LOGOUT_SUCCESS,
payload: res.data
})
})
.catch(err => dispatch({
type: LOGOUT_FAILED,
payload: err
}))
}
}
export default withCookies(logout) <<added this(wrong)


this one is wrong because there should only be one export default. But I don't know how to implement withCookies to const and there are also these ones that are included in the example and I don't know if I need them or where do I put them:



  static propTypes = {
cookies: instanceOf(Cookies).isRequired
};

constructor(props) {
super(props);

const { cookies } = props;
this.state = {
name: cookies.get('name') || 'Ben'
};
}


and also, another question is that, I can access my cookies anywhere in my project right? just like how localstorage is accessible to my project?



I hope someone can help me and I am a newbie to this. I have never used cookies before so thank you for your consideration.










share|improve this question



























    1














    I have read articles that saving the token in localstorage is dangerous to XSS attack. So I have decided to store my tokens in cookies. And I am using react-cookie. I saw the examples and I am trying to do it but my auth.js consists of const and is not a class, so I do not know how to use the withCookies() with it, this is my auth.js where I want to store the token to the cookies:



    import {
    LOGIN,
    LOGIN_SUCCESS,
    LOGIN_FAILED,

    GET_USER_DATA,
    GET_USER_DATA_SUCCESS,
    GET_USER_DATA_FAILED,

    LOGOUT,
    LOGOUT_SUCCESS,
    LOGOUT_FAILED,
    } from './types'

    import axios from 'axios'
    var api = require ('./../api.js');


    export const login = (email, pass) => {
    return (dispatch) => {
    dispatch({
    type: LOGIN
    })
    var url = api.logInApi
    axios.post(url, {
    email: email,
    password: pass
    })
    .then(res => {
    dispatch({
    type: LOGIN_SUCCESS,
    payload: res.data
    })
    localStorage.setItem('token', res.data.token)
    dispatch(getUserData())
    })
    .catch(err => dispatch({
    type: LOGIN_FAILED,
    payload: err
    }))
    }
    }



    export const getUserData = () => {
    return (dispatch) => {
    dispatch({
    type: GET_USER_DATA
    })
    var url = api.getUserDataApi
    axios.post(url, {}, {headers: {
    "Authorization": `Bearer ${localStorage.getItem("token")}`
    }})
    .then(res => {
    dispatch({
    type: GET_USER_DATA_SUCCESS,
    payload: res.data
    })
    })
    .catch(err => dispatch({
    type: GET_USER_DATA_FAILED,
    payload: err
    }))
    }
    }


    export const logout = () => {
    return (dispatch) => {
    dispatch({
    type: LOGOUT
    })
    var url = api.logoutApi
    axios.post(url, {}, {headers: {
    "Authorization": `Bearer ${localStorage.getItem("token")}`
    }})
    .then(res => {
    window.location.replace("")
    dispatch({
    type: LOGOUT_SUCCESS,
    payload: res.data
    })
    })
    .catch(err => dispatch({
    type: LOGOUT_FAILED,
    payload: err
    }))
    }
    }


    Now, I tried doing this and of course it doesn't work:



    import {
    LOGIN,
    LOGIN_SUCCESS,
    LOGIN_FAILED,

    GET_USER_DATA,
    GET_USER_DATA_SUCCESS,
    GET_USER_DATA_FAILED,

    LOGOUT,
    LOGOUT_SUCCESS,
    LOGOUT_FAILED,
    } from './types'

    import axios from 'axios'
    import { withCookies, Cookies } from 'react-cookie'; <<added this
    var api = require ('./../api.js');

    const login = (email, pass) => {
    return (dispatch) => {
    dispatch({
    type: LOGIN
    })
    const { cookies } = props; <<added this
    var url = api.logInApi
    axios.post(url, {
    email: email,
    password: pass
    })
    .then(res => {
    dispatch({
    type: LOGIN_SUCCESS,
    payload: res.data
    })
    cookies.set('token', res.data.token, { path: '/' }); <<added this
    dispatch(getUserData())
    })
    .catch(err => dispatch({
    type: LOGIN_FAILED,
    payload: err
    }))
    }
    }
    export default withCookies(login) <<added this(wrong)



    const getUserData = () => {
    return (dispatch) => {
    dispatch({
    type: GET_USER_DATA
    })
    const { cookies } = props; <<added this
    var token = cookies.get('token'); <<added this
    var url = api.getUserDataApi
    axios.post(url, {}, {headers: {
    "Authorization": `Bearer ${token}` <<added this(this is where I wanna get the cookie)
    }})
    .then(res => {
    dispatch({
    type: GET_USER_DATA_SUCCESS,
    payload: res.data
    })
    })
    .catch(err => dispatch({
    type: GET_USER_DATA_FAILED,
    payload: err
    }))
    }
    }
    export default withCookies(getUserData) <<added this(wrong)


    const logout = () => {
    return (dispatch) => {
    dispatch({
    type: LOGOUT
    })
    const { cookies } = props;
    var token = cookies.get('token');
    var url = api.logoutApi
    axios.post(url, {}, {headers: {
    "Authorization": `Bearer ${token}` <<added this
    }})
    .then(res => {
    window.location.replace("")
    dispatch({
    type: LOGOUT_SUCCESS,
    payload: res.data
    })
    })
    .catch(err => dispatch({
    type: LOGOUT_FAILED,
    payload: err
    }))
    }
    }
    export default withCookies(logout) <<added this(wrong)


    this one is wrong because there should only be one export default. But I don't know how to implement withCookies to const and there are also these ones that are included in the example and I don't know if I need them or where do I put them:



      static propTypes = {
    cookies: instanceOf(Cookies).isRequired
    };

    constructor(props) {
    super(props);

    const { cookies } = props;
    this.state = {
    name: cookies.get('name') || 'Ben'
    };
    }


    and also, another question is that, I can access my cookies anywhere in my project right? just like how localstorage is accessible to my project?



    I hope someone can help me and I am a newbie to this. I have never used cookies before so thank you for your consideration.










    share|improve this question

























      1












      1








      1







      I have read articles that saving the token in localstorage is dangerous to XSS attack. So I have decided to store my tokens in cookies. And I am using react-cookie. I saw the examples and I am trying to do it but my auth.js consists of const and is not a class, so I do not know how to use the withCookies() with it, this is my auth.js where I want to store the token to the cookies:



      import {
      LOGIN,
      LOGIN_SUCCESS,
      LOGIN_FAILED,

      GET_USER_DATA,
      GET_USER_DATA_SUCCESS,
      GET_USER_DATA_FAILED,

      LOGOUT,
      LOGOUT_SUCCESS,
      LOGOUT_FAILED,
      } from './types'

      import axios from 'axios'
      var api = require ('./../api.js');


      export const login = (email, pass) => {
      return (dispatch) => {
      dispatch({
      type: LOGIN
      })
      var url = api.logInApi
      axios.post(url, {
      email: email,
      password: pass
      })
      .then(res => {
      dispatch({
      type: LOGIN_SUCCESS,
      payload: res.data
      })
      localStorage.setItem('token', res.data.token)
      dispatch(getUserData())
      })
      .catch(err => dispatch({
      type: LOGIN_FAILED,
      payload: err
      }))
      }
      }



      export const getUserData = () => {
      return (dispatch) => {
      dispatch({
      type: GET_USER_DATA
      })
      var url = api.getUserDataApi
      axios.post(url, {}, {headers: {
      "Authorization": `Bearer ${localStorage.getItem("token")}`
      }})
      .then(res => {
      dispatch({
      type: GET_USER_DATA_SUCCESS,
      payload: res.data
      })
      })
      .catch(err => dispatch({
      type: GET_USER_DATA_FAILED,
      payload: err
      }))
      }
      }


      export const logout = () => {
      return (dispatch) => {
      dispatch({
      type: LOGOUT
      })
      var url = api.logoutApi
      axios.post(url, {}, {headers: {
      "Authorization": `Bearer ${localStorage.getItem("token")}`
      }})
      .then(res => {
      window.location.replace("")
      dispatch({
      type: LOGOUT_SUCCESS,
      payload: res.data
      })
      })
      .catch(err => dispatch({
      type: LOGOUT_FAILED,
      payload: err
      }))
      }
      }


      Now, I tried doing this and of course it doesn't work:



      import {
      LOGIN,
      LOGIN_SUCCESS,
      LOGIN_FAILED,

      GET_USER_DATA,
      GET_USER_DATA_SUCCESS,
      GET_USER_DATA_FAILED,

      LOGOUT,
      LOGOUT_SUCCESS,
      LOGOUT_FAILED,
      } from './types'

      import axios from 'axios'
      import { withCookies, Cookies } from 'react-cookie'; <<added this
      var api = require ('./../api.js');

      const login = (email, pass) => {
      return (dispatch) => {
      dispatch({
      type: LOGIN
      })
      const { cookies } = props; <<added this
      var url = api.logInApi
      axios.post(url, {
      email: email,
      password: pass
      })
      .then(res => {
      dispatch({
      type: LOGIN_SUCCESS,
      payload: res.data
      })
      cookies.set('token', res.data.token, { path: '/' }); <<added this
      dispatch(getUserData())
      })
      .catch(err => dispatch({
      type: LOGIN_FAILED,
      payload: err
      }))
      }
      }
      export default withCookies(login) <<added this(wrong)



      const getUserData = () => {
      return (dispatch) => {
      dispatch({
      type: GET_USER_DATA
      })
      const { cookies } = props; <<added this
      var token = cookies.get('token'); <<added this
      var url = api.getUserDataApi
      axios.post(url, {}, {headers: {
      "Authorization": `Bearer ${token}` <<added this(this is where I wanna get the cookie)
      }})
      .then(res => {
      dispatch({
      type: GET_USER_DATA_SUCCESS,
      payload: res.data
      })
      })
      .catch(err => dispatch({
      type: GET_USER_DATA_FAILED,
      payload: err
      }))
      }
      }
      export default withCookies(getUserData) <<added this(wrong)


      const logout = () => {
      return (dispatch) => {
      dispatch({
      type: LOGOUT
      })
      const { cookies } = props;
      var token = cookies.get('token');
      var url = api.logoutApi
      axios.post(url, {}, {headers: {
      "Authorization": `Bearer ${token}` <<added this
      }})
      .then(res => {
      window.location.replace("")
      dispatch({
      type: LOGOUT_SUCCESS,
      payload: res.data
      })
      })
      .catch(err => dispatch({
      type: LOGOUT_FAILED,
      payload: err
      }))
      }
      }
      export default withCookies(logout) <<added this(wrong)


      this one is wrong because there should only be one export default. But I don't know how to implement withCookies to const and there are also these ones that are included in the example and I don't know if I need them or where do I put them:



        static propTypes = {
      cookies: instanceOf(Cookies).isRequired
      };

      constructor(props) {
      super(props);

      const { cookies } = props;
      this.state = {
      name: cookies.get('name') || 'Ben'
      };
      }


      and also, another question is that, I can access my cookies anywhere in my project right? just like how localstorage is accessible to my project?



      I hope someone can help me and I am a newbie to this. I have never used cookies before so thank you for your consideration.










      share|improve this question













      I have read articles that saving the token in localstorage is dangerous to XSS attack. So I have decided to store my tokens in cookies. And I am using react-cookie. I saw the examples and I am trying to do it but my auth.js consists of const and is not a class, so I do not know how to use the withCookies() with it, this is my auth.js where I want to store the token to the cookies:



      import {
      LOGIN,
      LOGIN_SUCCESS,
      LOGIN_FAILED,

      GET_USER_DATA,
      GET_USER_DATA_SUCCESS,
      GET_USER_DATA_FAILED,

      LOGOUT,
      LOGOUT_SUCCESS,
      LOGOUT_FAILED,
      } from './types'

      import axios from 'axios'
      var api = require ('./../api.js');


      export const login = (email, pass) => {
      return (dispatch) => {
      dispatch({
      type: LOGIN
      })
      var url = api.logInApi
      axios.post(url, {
      email: email,
      password: pass
      })
      .then(res => {
      dispatch({
      type: LOGIN_SUCCESS,
      payload: res.data
      })
      localStorage.setItem('token', res.data.token)
      dispatch(getUserData())
      })
      .catch(err => dispatch({
      type: LOGIN_FAILED,
      payload: err
      }))
      }
      }



      export const getUserData = () => {
      return (dispatch) => {
      dispatch({
      type: GET_USER_DATA
      })
      var url = api.getUserDataApi
      axios.post(url, {}, {headers: {
      "Authorization": `Bearer ${localStorage.getItem("token")}`
      }})
      .then(res => {
      dispatch({
      type: GET_USER_DATA_SUCCESS,
      payload: res.data
      })
      })
      .catch(err => dispatch({
      type: GET_USER_DATA_FAILED,
      payload: err
      }))
      }
      }


      export const logout = () => {
      return (dispatch) => {
      dispatch({
      type: LOGOUT
      })
      var url = api.logoutApi
      axios.post(url, {}, {headers: {
      "Authorization": `Bearer ${localStorage.getItem("token")}`
      }})
      .then(res => {
      window.location.replace("")
      dispatch({
      type: LOGOUT_SUCCESS,
      payload: res.data
      })
      })
      .catch(err => dispatch({
      type: LOGOUT_FAILED,
      payload: err
      }))
      }
      }


      Now, I tried doing this and of course it doesn't work:



      import {
      LOGIN,
      LOGIN_SUCCESS,
      LOGIN_FAILED,

      GET_USER_DATA,
      GET_USER_DATA_SUCCESS,
      GET_USER_DATA_FAILED,

      LOGOUT,
      LOGOUT_SUCCESS,
      LOGOUT_FAILED,
      } from './types'

      import axios from 'axios'
      import { withCookies, Cookies } from 'react-cookie'; <<added this
      var api = require ('./../api.js');

      const login = (email, pass) => {
      return (dispatch) => {
      dispatch({
      type: LOGIN
      })
      const { cookies } = props; <<added this
      var url = api.logInApi
      axios.post(url, {
      email: email,
      password: pass
      })
      .then(res => {
      dispatch({
      type: LOGIN_SUCCESS,
      payload: res.data
      })
      cookies.set('token', res.data.token, { path: '/' }); <<added this
      dispatch(getUserData())
      })
      .catch(err => dispatch({
      type: LOGIN_FAILED,
      payload: err
      }))
      }
      }
      export default withCookies(login) <<added this(wrong)



      const getUserData = () => {
      return (dispatch) => {
      dispatch({
      type: GET_USER_DATA
      })
      const { cookies } = props; <<added this
      var token = cookies.get('token'); <<added this
      var url = api.getUserDataApi
      axios.post(url, {}, {headers: {
      "Authorization": `Bearer ${token}` <<added this(this is where I wanna get the cookie)
      }})
      .then(res => {
      dispatch({
      type: GET_USER_DATA_SUCCESS,
      payload: res.data
      })
      })
      .catch(err => dispatch({
      type: GET_USER_DATA_FAILED,
      payload: err
      }))
      }
      }
      export default withCookies(getUserData) <<added this(wrong)


      const logout = () => {
      return (dispatch) => {
      dispatch({
      type: LOGOUT
      })
      const { cookies } = props;
      var token = cookies.get('token');
      var url = api.logoutApi
      axios.post(url, {}, {headers: {
      "Authorization": `Bearer ${token}` <<added this
      }})
      .then(res => {
      window.location.replace("")
      dispatch({
      type: LOGOUT_SUCCESS,
      payload: res.data
      })
      })
      .catch(err => dispatch({
      type: LOGOUT_FAILED,
      payload: err
      }))
      }
      }
      export default withCookies(logout) <<added this(wrong)


      this one is wrong because there should only be one export default. But I don't know how to implement withCookies to const and there are also these ones that are included in the example and I don't know if I need them or where do I put them:



        static propTypes = {
      cookies: instanceOf(Cookies).isRequired
      };

      constructor(props) {
      super(props);

      const { cookies } = props;
      this.state = {
      name: cookies.get('name') || 'Ben'
      };
      }


      and also, another question is that, I can access my cookies anywhere in my project right? just like how localstorage is accessible to my project?



      I hope someone can help me and I am a newbie to this. I have never used cookies before so thank you for your consideration.







      javascript reactjs cookies






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 14 '18 at 3:58









      eibersji

      454421




      454421
























          1 Answer
          1






          active

          oldest

          votes


















          1














          I personally would rather using js-cookie to write/read cookies.



          It has a very basic API:



          Cookie.set('cookie_name', 'value') // will set "cookie_name" to "value"
          Cookie.get('cookie_name') // will return "value"


          Which means:



          const login  = (email, pass, cookie) => {
          return (dispatch) => {
          dispatch({
          type: LOGIN
          })
          var url = api.logInApi
          axios.post(url, {
          email: email,
          password: pass
          })
          .then(res => {
          dispatch({
          type: LOGIN_SUCCESS,
          payload: res.data
          })
          cookies.set('token', res.data.token);
          dispatch(getUserData())
          })
          .catch(err => dispatch({
          type: LOGIN_FAILED,
          payload: err
          }))
          }
          }


          Passing to the login funuction js-cookie's Cookie in the 3rd argument.



          Now, you can still use the same react-cookie package to read the cookie values (I believe there shouldn't be any conflicts). Or you can replace it with js-cookie. To do that, however, you will have to pass the Cookie object to props. I probably would do that using mapStateToProps if you're using Redux or just by simply passing it through JSX






          share|improve this answer























          • I will take a look at js-cookie. I'll get back to you in a minute :)
            – eibersji
            Nov 14 '18 at 5:12











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53293002%2freactjs-how-to-implement-react-cookie-properly-in-an-action%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          I personally would rather using js-cookie to write/read cookies.



          It has a very basic API:



          Cookie.set('cookie_name', 'value') // will set "cookie_name" to "value"
          Cookie.get('cookie_name') // will return "value"


          Which means:



          const login  = (email, pass, cookie) => {
          return (dispatch) => {
          dispatch({
          type: LOGIN
          })
          var url = api.logInApi
          axios.post(url, {
          email: email,
          password: pass
          })
          .then(res => {
          dispatch({
          type: LOGIN_SUCCESS,
          payload: res.data
          })
          cookies.set('token', res.data.token);
          dispatch(getUserData())
          })
          .catch(err => dispatch({
          type: LOGIN_FAILED,
          payload: err
          }))
          }
          }


          Passing to the login funuction js-cookie's Cookie in the 3rd argument.



          Now, you can still use the same react-cookie package to read the cookie values (I believe there shouldn't be any conflicts). Or you can replace it with js-cookie. To do that, however, you will have to pass the Cookie object to props. I probably would do that using mapStateToProps if you're using Redux or just by simply passing it through JSX






          share|improve this answer























          • I will take a look at js-cookie. I'll get back to you in a minute :)
            – eibersji
            Nov 14 '18 at 5:12
















          1














          I personally would rather using js-cookie to write/read cookies.



          It has a very basic API:



          Cookie.set('cookie_name', 'value') // will set "cookie_name" to "value"
          Cookie.get('cookie_name') // will return "value"


          Which means:



          const login  = (email, pass, cookie) => {
          return (dispatch) => {
          dispatch({
          type: LOGIN
          })
          var url = api.logInApi
          axios.post(url, {
          email: email,
          password: pass
          })
          .then(res => {
          dispatch({
          type: LOGIN_SUCCESS,
          payload: res.data
          })
          cookies.set('token', res.data.token);
          dispatch(getUserData())
          })
          .catch(err => dispatch({
          type: LOGIN_FAILED,
          payload: err
          }))
          }
          }


          Passing to the login funuction js-cookie's Cookie in the 3rd argument.



          Now, you can still use the same react-cookie package to read the cookie values (I believe there shouldn't be any conflicts). Or you can replace it with js-cookie. To do that, however, you will have to pass the Cookie object to props. I probably would do that using mapStateToProps if you're using Redux or just by simply passing it through JSX






          share|improve this answer























          • I will take a look at js-cookie. I'll get back to you in a minute :)
            – eibersji
            Nov 14 '18 at 5:12














          1












          1








          1






          I personally would rather using js-cookie to write/read cookies.



          It has a very basic API:



          Cookie.set('cookie_name', 'value') // will set "cookie_name" to "value"
          Cookie.get('cookie_name') // will return "value"


          Which means:



          const login  = (email, pass, cookie) => {
          return (dispatch) => {
          dispatch({
          type: LOGIN
          })
          var url = api.logInApi
          axios.post(url, {
          email: email,
          password: pass
          })
          .then(res => {
          dispatch({
          type: LOGIN_SUCCESS,
          payload: res.data
          })
          cookies.set('token', res.data.token);
          dispatch(getUserData())
          })
          .catch(err => dispatch({
          type: LOGIN_FAILED,
          payload: err
          }))
          }
          }


          Passing to the login funuction js-cookie's Cookie in the 3rd argument.



          Now, you can still use the same react-cookie package to read the cookie values (I believe there shouldn't be any conflicts). Or you can replace it with js-cookie. To do that, however, you will have to pass the Cookie object to props. I probably would do that using mapStateToProps if you're using Redux or just by simply passing it through JSX






          share|improve this answer














          I personally would rather using js-cookie to write/read cookies.



          It has a very basic API:



          Cookie.set('cookie_name', 'value') // will set "cookie_name" to "value"
          Cookie.get('cookie_name') // will return "value"


          Which means:



          const login  = (email, pass, cookie) => {
          return (dispatch) => {
          dispatch({
          type: LOGIN
          })
          var url = api.logInApi
          axios.post(url, {
          email: email,
          password: pass
          })
          .then(res => {
          dispatch({
          type: LOGIN_SUCCESS,
          payload: res.data
          })
          cookies.set('token', res.data.token);
          dispatch(getUserData())
          })
          .catch(err => dispatch({
          type: LOGIN_FAILED,
          payload: err
          }))
          }
          }


          Passing to the login funuction js-cookie's Cookie in the 3rd argument.



          Now, you can still use the same react-cookie package to read the cookie values (I believe there shouldn't be any conflicts). Or you can replace it with js-cookie. To do that, however, you will have to pass the Cookie object to props. I probably would do that using mapStateToProps if you're using Redux or just by simply passing it through JSX







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 14 '18 at 5:05

























          answered Nov 14 '18 at 4:55









          boaz_shuster

          1,9751324




          1,9751324












          • I will take a look at js-cookie. I'll get back to you in a minute :)
            – eibersji
            Nov 14 '18 at 5:12


















          • I will take a look at js-cookie. I'll get back to you in a minute :)
            – eibersji
            Nov 14 '18 at 5:12
















          I will take a look at js-cookie. I'll get back to you in a minute :)
          – eibersji
          Nov 14 '18 at 5:12




          I will take a look at js-cookie. I'll get back to you in a minute :)
          – eibersji
          Nov 14 '18 at 5:12


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53293002%2freactjs-how-to-implement-react-cookie-properly-in-an-action%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Guess what letter conforming each word

          Run scheduled task as local user group (not BUILTIN)

          Port of Spain