如何使用Expo在React Native中设置cookie?

时间:2017-12-16 22:09:19

标签: javascript reactjs cookies react-native

我很难让cookie工作,在服务器端我通过从req.cookies抓取来验证用户。

以下是我目前在React Native中的Login.js文件中设置它的方法:

import Cookies from "universal-cookie";

const cookies = new Cookies();
 cookies.set("token", token, {
                expires: 7, // 7 days
                path: "/"
                //,secure: true // If served over HTTPS
   });

当我在此页面上调用cookies.get("token")时,此功能正常。但是,当我导入时,设置const,并在另一个页面上调用get,令牌不显示...

另外,当我像这样进行抓取时:

fetch("http://192.168.0.115:3000/myTransactions/", {
      credentials: "same-origin",
      method: "POST",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
      }
    })

服务器未收到任何Cookie。我甚至更改了凭据以表示包含。

我在Windows上使用expo和我的终端运行它而不必使用android studio或xcode。我不确定这是否是一个可能的问题。

有任何想法!

由于

2 个答案:

答案 0 :(得分:2)

有几件事...... react-native-keychain ...比cookies更安全! https://github.com/oblador/react-native-keychain

其次,您是否尝试过AsyncStorage?这是React-natives内置于" localStorage"在本质上。我认为这是你正在寻找的东西。

https://facebook.github.io/react-native/docs/asyncstorage.html

    // to set
AsyncStorage.setItem('@app:session', token);

// to get
AsyncStorage.getItem('@app:session').then(token => {
  // use token
});

OP的更新 如果您的设置看起来像这样,您只需将标记值作为标题发送,您可以以最安全/最方便的格式存储此信息。 在这个例子中,auth可以是这些选项中的任何一个....

localStorage.set('token', 38573875ihdkhai)
createCookie('ppkcookie' 7asdfasdf);

export const userFetchRequest = () => (dispatch, getState) => {
  let {auth} = getState();
  return superagent.get(`${__API_URL__}/user/me`)
    .set('Authorization', `Bearer ${auth}`)
    .then(res => {
      dispatch(userSet(res.body));
      return res;
    });
};

答案 1 :(得分:0)

您可以使用Cookie或仅在Web应用的 localStorage 中存储令牌。

但是对于React Native应用程序 AsyncStorage 的使用将是更好的解决方案。

关于 AsyncStorage

  

AsyncStorage是一个简单的,未加密的,异步的,持久的,   应用程序全局的键值存储系统。应该使用它   而不是LocalStorage。

     

在iOS上,AsyncStorage由存储小值的本机代码提供支持   在序列化的字典中,在单独的文件中使用较大的值。上   Android,AsyncStorage将根据具体内容使用RocksDB或SQLite   是可用的。

此外,AsyncStorage具有非常简单的API:

const TOKEN = "TOKEN";

// save token
AsyncStorage.setItem(TOKEN, token);

// get token
AsyncStorage.getItem(TOKEN).then(token => {
  // token value could be used
});

如果您对 AsyncStorage 安全性感到烦恼,可以通过link找到更多信息。