如何向客户端发送Facebooklogin后创build的JSON Web Token?

我试图find一种方法来发送在服务器端创build的JSON Web令牌到客户端,以便客户端可以将其存储在HTML5本地存储。

具体来说,我的应用程序使用Passport进行身份validation,使用NodeJS / ExpressJS构build,有两种用户:本地用户和Facebook用户。

当本地用户用他们的用户名和密码填写login表单时,客户机要求服务器进行authentication,服务器向客户机发送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'; } }); 

然后,用户被redirect到一个Welcome页面,该页面在本地存储器中查找以查找令牌,以从数据库中请求一些数据。

 $.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用户login时,一切都发生在服务器端,所以我不知道如何将JWT存储在本地存储中。

这里是facebook-passportauthentication的服务器端代码:

 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结合在一起并不是您已经发现的主要用例。 其中一种可能的方法是在OAuthcallback中将令牌与redirecturl一起传输。

 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}`); }); 

在前端应用程序设置中,可以处理令牌的路线将其保存到本地/会话存储。