我有一个运行节点js和护照的Web应用程序.js并且身份验证流程运行良好。我正在尝试开发一个反应原生并制作相同的身份验证流程(使用 passport.js(。
我更改了护照代码以重定向回 react-native 应用程序(带有链接(,它起作用了。
所以流程是:
- 使用登录网址打开浏览器(/auth/google(
- 用户已登录
- 重定向回本机应用
- 发送请求以验证用户是否已登录 - 但用户未登录,我认为是因为 cookie 未发送到服务器
我还尝试向获取凭据添加"同源"或"包含",但用户仍未登录。
我使用的一些代码:
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
我错过了什么吗?
如何在反应原生中处理 cookie?像在网络上一样吗?重定向后,Cookie 应如何从浏览器传递到本机应用程序?
React Native 不是浏览器环境。它不会像浏览器那样自动处理 Cookie。
您必须使用一些 cookie 感知请求库,例如超级代理。
示例用法(来自超级代理文档(:
const agent = request.agent();
agent
.post('/login')
.then(() => {
return agent.get('/cookied-page');
});
然后,来自agent
的所有请求将自动处理cookie(共享相同的cookiejar(。