如何在反应原生中处理cookie?

时间:2018-04-12 10:36:46

标签: node.js react-native passport.js

我有一个使用节点js和passport.js运行的Web应用程序,并且身份验证流程运行良好。 我正在尝试开发一个react-native并使用相同的身份验证流程(使用passport.js)。

我更改了护照代码以重定向回反应原生应用程序(使用链接)并且它有效。

所以流程是:

  1. 使用登录网址(/ auth / google)
  2. 打开浏览器
  3. 用户已登录
  4. 重定向回原生应用
  5. 发送请求以验证用户是否已登录 - 但用户未登录,我认为因为cookie未发送到服务器
  6. 我还尝试添加获取凭据“same-origin”或“include”,但用户仍然没有登录。

    我使用的一些代码:

    Linking.openURL("http://<my ip>:3000/auth/google"); //for log in
    
    app.get('/auth/google/callback', //handle the log in with passport js
        passport.authenticate('google', {
            failureRedirect: '/login'
        }), function(req, res) {
            res.redirect('MyApp://login); // redirect back to native app
        });
    
    fetch("http://<my ip>:3000/api1", {credentials: /*"same-origin"*/"include"}) //get 401 -> user is not logged in
    

    我错过了什么吗?

    如何在react-native中处理cookie?是在网络上吗?重定向后如何将cookie从浏览器传递到本机应用程序?

1 个答案:

答案 0 :(得分:1)

React Native不是浏览器环境。它不会自动处理像浏览器这样的cookie。

您必须使用一些Cookie感知请求库,例如superagent

示例用法(来自superagent documentation):

$filename =     'file'.$i;

                    $ImageName      = str_replace(' ','_',strtolower($_FILES[$filename]['name']));
                    $tmpName        = $_FILES[$filename]['tmp_name'];
                    $ImageSize      = $_FILES[$filename]['size'];                   
                    $ImageType      = $_FILES[$filename]['type']; //"image/png", image/jpeg etc.

                    $ImageExt       = substr($ImageName, strrpos($ImageName, '.'));
                    $ImageExt       = str_replace('.','',$ImageExt);
                    $ImageName      = preg_replace("/\.[^.\s]{3,4}$/", "", $ImageName);
                    $ImageName      = $ImageName.'.'.$ImageExt;

                    $fp             = fopen($tmpName, 'r');
                    $image          = fread($fp, filesize($tmpName));
                    fclose($fp);

然后来自const agent = request.agent(); agent .post('/login') .then(() => { return agent.get('/cookied-page'); }); 的所有请求将自动处理cookie(共享相同的cookie jar)。