Firebase自定义login过程中何处存储密钥

我将Node.JS与Firebase耦合,并计划使用LinkedIn来login用户。

在后台我有:

var FirebaseTokenGenerator = require("firebase-token-generator"); var mySecret = 'XXXXX' module.exports = function (app, passport) { app.get('/fire', function (req, res) { var tokenGenerator = new FirebaseTokenGenerator(mySecret); var token = tokenGenerator.createToken({ "app_user_id": 123X, "isModerator": true }); res.render('firebase-index.ejs', {token: token, kale: 'mazing'}); }) }; 

在模板firebase-index.ejs上:

在这里,我不确定如何存储授权过程中使用的令牌。 我似乎不能直接使用它,除非我插入到像这样的DOM元素

 <span id="token"><%= token %><span> 

然后我可以通过下面的'token.textContent'访问它

 dataRef.auth(token.textContent, function(error) { if(error) { console.log("Login Failed!", error); } else { console.log("Login Succeeded!"); console.log(token.textContent); } }); 

这是安全/首选的方式吗? 另外,我login后,如何访问authvariables? 谢谢

大多数情况下,在现代应用程序中,您将向服务器API请求身份validation令牌,而不是将身份validation令牌作为HTML主体的一部分发送。 这是通过对您的后端进行HTTP调用完成的,这将返回一个JSON对象(即asynchronous请求)。

服务器代码(假设快递):

 var FirebaseTokenGenerator = require("firebase-token-generator"); var tokenGenerator = new FirebaseTokenGenerator(process.env.FIREBASE_SECRET); app.get('/authToken', function(req, res){ var token = tokenGenerator.createToken({some: "arbitrary", data: "here"}); res.json(token); }); 

客户端代码(假设jQuery):

 $.getJSON( "https://SERVER/authToken", function( token ) { console.log(token); }); 

如果您坚持将其作为view / html数据的一部分返回,您可以直接将其注入JavaScriptvariables(因为您正在生成它并知道它不包含任何恶意代码)。

在这里,我只是使用窗口(即全局),但你更喜欢有一些范围的对象(例如myApp.config.authToken),你可以把它附加到。

 <script>window.authToken = '<%= token %>';<script>