我有一个使用节点js和passport.js运行的Web应用程序,并且身份验证流程运行良好。 我正在尝试开发一个react-native并使用相同的身份验证流程(使用passport.js)。
我更改了护照代码以重定向回反应原生应用程序(使用链接)并且它有效。
所以流程是:
我还尝试添加获取凭据“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从浏览器传递到本机应用程序?
答案 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)。