我有一个VueJS应用程序,该应用程序允许用户使用Firebase实时数据库中的数据登录并查看特权页面。用户通过localhost:8080
上的auth0登录前端后,我很难连接到localhost:8081
上的Express服务器以获取自定义Firebase令牌。
登录由auth0处理。打电话后
auth.authorize({...})
,
执行回调函数:
handleCallback() {
auth.parseHash({ hash: window.location.hash }, (err, authResult) => {
if (authResult && authResult.accessToken) {
localStorage.setItem(ACCESS_TOKEN_KEY, authResult.accessToken);
localStorage.setItem(ID_TOKEN_KEY, authResult.idToken);
window.location.href = '/';
this.getFirebaseToken(authResult);
} else if (err) {
console.warn(err);
}
});
},
在jwt.io上检查令牌表明,访问令牌和id令牌几乎相同(标头,大多数有效负载字段),除了以下有效负载方面的差异:
"aud"
["https://myapp.au.auth0.com/api/v2/","https://myapp.au.auth0.com/userinfo"]
"nqy5aw2McWTpK6PYZ8nKi6zzaSsMRAn7"
访问令牌具有一个"azp"
字段,id具有"at_hash"
和"nonce"
。
然后,我尝试将用户连接到我的快速服务器以获取自定义令牌。
xhr请求:
getFirebaseToken(resultObject) {
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:8081/auth/firebase', true);
xhr.setRequestHeader('Authorization', `Bearer ${resultObject.accessToken}`);
xhr.onload = () => {
console.log(JSON.parse(xhr.response));
};
xhr.send();
},
服务器代码:
app.get('/auth/firebase', jwtCheck, (req, res) => {
const uid = req.user.sub;
firebaseAdmin.auth().createCustomToken(uid)
.then(customToken => {
console.log(customToken);
res.json({ firebaseToken: customToken });
})
.catch(err => {
res.status(500).send({
message: 'Something went wrong in acquiring a Firebase token',
error: err,
})
})
});
这时,由于出现一系列错误,我无法继续进行Firebase自定义登录。
从前端的“网络”选项卡显示此xhr请求的状态为'canceled'
。控制台中也存在未捕获的错误。
节点服务器说“ jwt听众无效,预期http://localhost:8081/
”。
在auth0仪表板中,https://myapp.au.auth0.com, http://localhost:8080, http://localhost:8081
设置为“允许的Web起源”,以及前端和后端的“允许的起源”(cors)。
对调试方法的建议表示赞赏。
编辑:在Firefox上,存在以下几种错误:
1。
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://192.168.1.13:8080/sockjs-node/info?t=1540524441491. (Reason: CORS request did not succeed).[Learn More]
2。
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://myapp.au.auth0.com/userinfo. (Reason: CORS request did not succeed).[Learn More]
[Show/hide message details.] Error: app.js line 3245 > eval:127:19
3。
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8081/auth/firebase. (Reason: CORS request did not succeed).[Learn More]