gpt4 book ai didi

node.js - 如何向客户端发送 Facebook 登录后创建的 JSON Web Token?

转载 作者:搜寻专家 更新时间:2023-10-31 23:52:18 24 4
gpt4 key购买 nike

我正在尝试找到一种方法将在服务器端创建的 JSON Web Token 发送到客户端,以便客户端可以将其存储在 HTML5 本地存储中。

具体来说,我的应用程序是用 NodeJS/ExpressJS 构建的,使用 Passport 进行身份验证,有两种用户:本地用户和 facebook 用户。

当本地用户使用用户名和密码填写登录表单时,客户端会向服务器请求身份验证,服务器会将 JWT 发送给客户端,然后将其存储在本地存储中。

         $.ajax({
url: "/authenticate",
type: 'POST',
data: user,
dataType: "json",
success: function(auth){
localStorage.setItem("token", auth.token);
window.location.href = '/welcome.html';
},
failure: function(errMsg) {
alert("falure");
window.location.href = '/login.html';
}
});

然后,用户被重定向到欢迎页面,该页面在本地存储中查找 token ,以便从数据库中请求一些数据。

$.ajax({
url: "/protectedEndpoint",
type: 'GET',
dataType: 'json',
beforeSend: function (xhr){
xhr.setRequestHeader('Authorization', localStorage.token);
},
success: function (data) {
...
},
error: function (e) {
alert(e.status + " " + e.statusText + " - " + e.responseText);
}

但是,当 facebook 用户登录时,一切都发生在服务器端,所以我不知道如何将 JWT 存储在本地存储中。

这是 facebook-passport 身份验证的服务器端代码:

app.get('/auth/facebook', passport.authenticate('facebook', {scope: ['email']}));

app.get('/auth/facebook/callback',
passport.authenticate('facebook', {session: false, failureRedirect: '/login.html' }),
function (req, res) {
res.redirect('/welcome.html');
});

提前致谢!

最佳答案

将 OAuth 与 JWT 相结合并不是您已经发现的主要用例。一种可能的方法是在 OAuth 回调中使用重定向 URL 传输 token 。

passport.authenticate('facebook', {session: false, failureRedirect: '/login.html' }),
function (req, res) {
// Create JWT token here are pass it back to front application
res.redirect(`/token/${JWT}`);
});

在前端应用程序中设置可以处理 token 的路由,将其保存到本地/ session 存储。

关于node.js - 如何向客户端发送 Facebook 登录后创建的 JSON Web Token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39552121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com