Tag: firebase authentication

firebase-admin auth错误,同时调用`getUser`,但在调用verifyToken时工作正常

在服务器端使用firebase-admin时,我需要从Firebase身份validation中获取用户数据。 但是我发现,如果我使用firebase提供的jwt令牌,我无法从解码令牌获取电子邮件或其他提供者的数据。 (很确定我已经正确添加了特定的作用域。) 然后我转向使用Firebase的pipe理API来从Firebase的身份validation获取用户数据。 代码如下所示: import * as admin from 'firebase-admin' const auth = admin.auth() auth.verifyIdToken(idToken) .then(decodedToken => decodedToken.user_id) .then(uid => { auth.getUser(user_id) .then((userRecord) => { console.log("Successfully fetched user data:", userRecord.json(); }) .catch(function(error) { console.log("Error fetching user data:", error); }); }) 然后我得到一个错误: Error fetching user data: Error: error:0906D06C:PEM routines:PEM_read_bio:no start line at Error (native) at […]

用于Firebase Admin SDK的Node.js身份validation服务器 – JWTvalidation问题

我正在开发一个项目,我们将在微服务架构中使用不同的服务,同时我们也希望使用一些Firebase服务。 我正在开发一个auth服务器,这个服务器将用于在Firebase以及其他API项目中使用自定义JWT。 我们希望使用Firebase Auth SDK轻松地与FB,Google,Twitter等进行整合,但是我们需要用更多的数据来丰富用户的令牌。 因此,我的思考过程是创build一个使用Firebase Admin SDK的Node.JS auth服务器来执行此操作。 stream程如下: 用户使用客户端上的collections提供程序login 如果login成功,用户将从Firebase收到JWT。 这被发送到auth服务器进行validation 如果auth服务器可以使用admin SDKvalidation令牌,则创build一个新的自定义令牌,并添加更多数据,然后将此新自定义令牌返回给客户端 让客户端使用新的自定义令牌重新进行身份validation,并将其用于与Firebase以及我们的其他API项目(主要在.NET Core中)进行通信。 步骤1-3工作正常。 尝试validation其他服务上的自定义令牌时出现问题 。 TL; DR :有两个问题: 在validation使用Firebase Node.JS Admin SDK发布的自定义令牌时,我应该使用什么作为公钥? 从Google公开的JWK中提取的关键字,还是从用于签名的私钥中提取的密钥? 在JWK方法的情况下,我应该如何构build一个kid头自定义令牌? 首先,我怀疑validation它的正确方法。 (请原谅,我没有那么有经验的创buildOAuthstream。)使用的algorithm是RS256,所以我应该能够使用公钥validation令牌。 正如我所看到的,有两种方法来获得这个关键: 从私钥中提取公钥并使用它进行validation。 我可以在auth服务器上的testingterminal上成功地进行validation,但是我觉得这是不正确的做法 另一种更正确的方法是使用令牌中的值在我的项目的Google的“/.well-known/openid-configuration/”端点上查找JWK,即 https://securetoken.google.com/[PROJECT ID] /。well-known / openid-configuration 检索正确的kid (密钥ID)的指数和模数,并从这些中创build公钥。 从admin SDK生成的令牌 admin.auth().createCustomToken(uid, additionalClaims).then(function(customToken) 一些自定义声明看起来像这样: 标题: { "alg": "RS256", "typ": "JWT" } 有效载荷: […]

Nodejs Firebase和Angular4authentication

我有一个客户端应用程序,用angular4编写,与firebase服务器通信。 目前,我正在尝试将一个nodejs与firebase集成,以便与客户端应用程序进行通信。 Firebase <—->客户端(Angular4)<—-> NodeJs(firebase-admin)<—-> Firebase 我已经设置了一个fire-adminconfiguration: var admin = require("firebase-admin"); var serviceAccount = require("./server/myfile.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://mydb.firebaseio.com" }); 并能够像这样检索数据: var db = admin.database(); var ref = db.ref("messages"); ref.once("value", function(snapshot) { console.log(snapshot.val()); }); 但是,我怎么能检查NodeJS服务器是否在客户端应用程序中的用户已经login ? 我需要这个NodeJS服务器与客户端进行通信,并在必要时提供数据和文件。

有没有办法通过我的Node.js服务器发送带有Firebase Admin SDK的validation邮件?

有没有办法从我的服务器发送电子邮件validation电子邮件? 这是如何在客户端上完成的: authData.sendEmailVerification().then(function() { 有没有办法在服务器上做到这一点?

在助手应用程序的Firebase函数中获取Node.js中的Google用户标识

我正在开始使用Google云端平台。 我正在开发一个Android应用程序,收集信息并将其存储在Firebase应用程序中。 这个想法是,谷歌助理function可以查询这些信息并将其读回,例如 OK Google,和Simons App交谈,告诉我上次XYZ完成的时间 但是,我得到的问题是让这个多用户。 我有Android应用程序收集数据并将其放入云中。 我正在使用FirebaseUser并在Android应用程序中使用getUid()来获取唯一的id,它是一个28个字符的string,如uVHkia8RRgWD8GGPVvW4AUDUK2 。 我已经在Google上设置了Actions,通过Web Fulfillment将它吸引到API.AI中,并获得了Node.js在Firebase函数中的工作。 不幸的是,我回来的UserID看起来更像: HTge48H0CF2FC5jJQCigFBc-UCQ 问题是这个UserID和我从Filebase User得到的UserUID不一样。 我在用着 let ApiAiApp = require('actions-on-google').ApiAiApp; const app = new ApiAiApp({request: request, response: response}); 和 const userId = app.getUser().userId; 我错过了什么? 我看到OAuth2,帐户链接等参考。我不完全确定在这一点上做什么。 我现在需要做的就是从FirebaseUser.getUID()获取User UID ,以便在Firebase数据库中查看数据。 我认为其余的应该是直截了当的。 从助理链接到Firebase有大量的文档,但在实际身份validation方面很less。 到目前为止,我还没有设置stream程,如授权码stream程,隐式stream程,或者根据API.AI和Fulfillment选项设置用户名/密码。 坦率地说,林不知道什么需要去哪里在这一点上。

Firebasepipe理员身份validation令牌被吊销

我试图实现一个node.js服务器来侦听我的firebase数据库中的更改。 这是我的代码来初始化服务器: var admin = require('firebase-admin'); var serviceAccount = require('./SERVICE-ACCOUNT.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://APP-NAME.firebaseio.com" }); var db = admin.database(); admin.database.enableLogging(true); var convRef = db.ref('conversations'); convRef.once('value', function(snapshot) { console.log("VALUE: " + snapshot.val()); }, function(error) { console.log("ERROR: " + error.code); }); 启用debugging后,我收到错误: p:0: Listen called for /conversations default p:0: Making a connection attempt p:0: Auth token […]

在部署Firebase项目时,错误显示“找不到模块firebase-functions”

当我试图部署一个firebase项目时,它会在npm控制台中显示一条错误信息'can not find module firebase-functions'。我所做的步骤(节点命令)是: npm install -g firebase-tools firebaselogin firebase初始化 最后是我困扰的地方 4. firebase部署 请帮帮我。

使用Firebase进行NodeJS身份validation

我想通过使用Firebase的NodeJS进行身份validation和保持会话。 客户端无法直接与Firebase进行通信。 简而言之: 客户端(浏览器)<—-> NodeJs(firebase-admin)<—-> Firebase 我在NodeJS中创build了Firebase客户端,然后使用login方法: var firebaseClient = require('firebase'); firebaseClient.initializeApp(config) firebaseClient.auth().signInWithEmailAndPassword(req.body.email, req.body.password).catch(function(error){ console.log(error); }) 然后我创build了检查经过身份validation的用户的path: app.get('/check',function(req,res){ var user = firebaseClient.auth().currentUser console.log(user) }) 此方法只允许我保留1个以前login的用户。 我想使用firebase-admin,但我不知道如何保持会话和validation用户

我可以使用pipe理身份validationAPI手动在Firebase中创build联合用户吗?

我有一个使用Firebase构build的Web应用程序。 在我的networking应用程序中,我有谷歌,firebase,叽叽喳喳注册/loginfunction。 现在我想把这个和我的api.ai代理整合起来,并且有一个无缝的账户链接。 因此,用户将使用他们从移动设备的googel Home / assistant应用程序连接到我的代理。 在这个阶段,我将拥有Google帐户Id,Google电子邮件地址,用户名称。 如果用户已经存在,我可以发送代理所需的令牌。 但是,如果用户是新的,我想在我的firebase数据库中创build帐户。 我无法find手动(从nodejs应用程序/云function)在Firebase中创build联合帐户的可能性! 我知道有可能创build一个电子邮件+虚拟密码帐户,但这不是我所期待的。 因为用户在尝试login我的networking应用程序时使用虚拟密码进行了注册,所以会使用他们的Googleloginfunction。 如果我创build电子邮件和虚拟密码,stream量不好,我强迫用户更改密码,并再次链接到他们的谷歌帐户,当他们来到我的networking频道! 有CLI方法,我可以从文件中导入用户 。 如果这是一个可能有人可以请帮我我怎么能做到这一点在云function?

将具有服务帐户的Firebase应用程序部署到Heroku(带有dotenv的环境variables)

我有一个使用Firebase服务帐户的节点应用程序。 我想部署到Heroku的应用程序,但我不想公开我的密钥。 我直接从公共github回购部署,所以我不想在部署中包含服务帐户文件。 我可以采取服务帐户json文件,使每个属性的环境variables,将这些variables添加到Heroku,并部署它。 一切都很好(在我的firebase应用上授权新的Heroku域之后),但有没有更好的方法来做到这一点? 这是有效的,但这样做很痛苦(复制和粘贴每个variables并移动它)。 我错过了一个更简单的方法来做到这一点? 这是我正在做的改变。 从这一行中,从文件中提取证书: admin.initializeApp({ credential: admin.credential.cert('./path/firebase-service-account.json'), databaseURL: "https://my-firebase-app.firebaseio.com" }); 对于这个从环境variables中引入所有相同的东西的对象: admin.initializeApp({ credential: admin.credential.cert({ "type": process.env.FIREBASE_TYPE, "project_id": process.env.FIREBASE_PROJECT_ID, "private_key_id": process.env.FIREBASE_PRIVATE_KEY_ID, "private_key": process.env.FIREBASE_PRIVATE_KEY, "client_email": process.env.FIREBASE_CLIENT_EMAIL, "client_id": process.env.FIREBASE_CLIENT_ID, "auth_uri": process.env.FIREBASE_AUTH_URI, "token_uri": process.env.FIREBASE_TOKEN_URI, "auth_provider_x509_cert_url": process.env.FIREBASE_AUTH_PROVIDER_X509_CERT_URL, "client_x509_cert_url": process.env.FIREBASE_CLIENT_X509_CERT_URL }), databaseURL: "https://my-firebase-app.firebaseio.com" }); 这是用Heroku的服务帐户部署Firebase应用程序的最佳做法吗? 我正在使用dotenv节点模块来完成这一点。