FirebaseAuthError: `developerClaims` argument must be a valid, non-null object containing the developer claims
FirebaseAuthError: `developerClaims` argument must be a valid, non-null object containing the developer claims
最终目标:创建一个简单的 NodeJs 以提供 Firestore 自定义令牌。
当前暂定:我正在尝试这种方法 。根据这个问题作者,他能够获得自定义令牌。不幸的是,我不断收到
C:\WSs\FireStoreDemos\firestore-custom-token>node server
C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\firebase-admin\lib\auth\token-generator.js:205
throw new error_1.FirebaseAuthError(error_1.AuthClientErrorCode.INVALID_ARGUMENT, errorMessage);
^
FirebaseAuthError: `developerClaims` argument must be a valid, non-null object containing the developer claims.
at FirebaseAuthError.FirebaseError [as constructor] (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:42:28)
at FirebaseAuthError.PrefixedFirebaseError [as constructor] (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:88:28)
at new FirebaseAuthError (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:147:16)
at FirebaseTokenGenerator.createCustomToken (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\auth\token-generator.js:205:19)
at Auth.BaseAuth.createCustomToken (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\auth\auth.js:94:36)
at Object.<anonymous> (C:\WSs\FireStoreDemos\firestore-custom-token\server.js:32:14)
[90m at Module._compile (internal/modules/cjs/loader.js:1147:30)[39m
[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:10)[39m
[90m at Module.load (internal/modules/cjs/loader.js:996:32)[39m
[90m at Function.Module._load (internal/modules/cjs/loader.js:896:14)[39m {
errorInfo: {
code: [32m'auth/argument-error'[39m,
message: [32m'`developerClaims` argument must be a valid, non-null object containing the developer claims.'[39m
},
codePrefix: [32m'auth'[39m
}
所有 NodeJs 文件是:
server.js
const admin = require('firebase-admin');
exports.serviceAccount = {
"type": "service_account",
"project_id": "angular-firebase-auth0-3c084",
"private_key_id": "6ba2ba41e0bf3837841aa9772c7d880b7ce3be81",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEv ... deleted ... 2PV9xsYvkt8+8Ce79fYKA=\n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-lu97a@angular-firebase-auth0-3c084.iam.gserviceaccount.com",
"client_id": "114324662014690107039",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-lu97a%40angular-firebase-auth0-3c084.iam.gserviceaccount.com"
}
admin.initializeApp({
credential: admin.credential.cert(exports.serviceAccount)
});
var uid = "NSBFu2YJNDgLQJCZ99dRJlP4DRo2"; //copied from https://console.firebase.google.com/project/firetestjimis/authentication/users
var claim = {
control: true
};
admin.auth().createCustomToken(uid, true)
.then(function (customToken) {
console.log(customToken)
})
.catch(function (error) {
console.log("Error creating custom token:", error);
});
package.json
{
"name": "firebase-auth0-nodeserver",
"version": "0.1.0",
"description": "Node.js server to provide custom auth token.",
"repository": "",
"main": "server.js",
"scripts": {
"start": "node server"
},
"author": "Auth0",
"license": "MIT",
"dependencies": {
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"express": "^4.17.1",
"express-jwt": "^5.3.3",
"firebase-admin": "^8.10.0",
"jwks-rsa": "^1.8.0"
},
"devDependencies": {}
}
如果它添加了一些东西,我设法部署了一个 Cloud Function,returns 一个带有 bellow 打字稿的自定义令牌。尽管如此,我需要在我们的本地服务器中使用相同的方法。
import * as functions from 'firebase-functions';
import * as admin from "firebase-admin";
export const getCustomToken = functions.https.onRequest((request, response) => {
if (admin.apps.length < 1) { //Checks if app already initialized
admin.initializeApp();
}
const uid = "NSBFu2YJNDgLQJCZ99dRJlP4DRo2";
admin.auth().createCustomToken(uid)
.then(function (customToken) {
console.log(customToken.toString);
response.send(customToken);
})
.catch(function (error) {
console.log("Error creating custom token:", error);
});
});
*** 已编辑
感谢 Frank 的回答,我通过“... admin.auth().createCustomToken(uid).then...”解决了这个问题。
然而,生成的自定义令牌似乎没有用(或者我可能理解错了)。
我希望有一个令牌,让我可以 post 将文档发送到 Firestore。好吧,使用上面的 Cloud Function,我得到了一个令牌,然后我 post 它到 googleapis。com/identitytoolkit/v3/relyingparty/verifyCustomToken 其中 returns 一个 idToken,我可以使用它来 post 文档到 Firestore 集合。我知道上面的 NodeJs 服务器会生成一个与我从上面的 Cloud Function 生成的令牌具有相同特征的令牌,但我似乎弄错了重点。
基本上,我正在尝试 ,看来作者的问题已经解决了。有趣的是,我可以使用 Cloud Function 来完成,但是我在从 NodeJs
上方生成自定义令牌时遇到问题
如果你有这样的语法问题,文档是你的朋友。来自 Auth.createCustomToken
的参考文档:
createCustomToken(uid: string, developerClaims?: Object): Promise<string>
...
Parameters
uid: string
The uid to use as the custom token's subject.
Optional developerClaims: Object
Optional additional claims to include in the custom token's payload.
因此 createCustomToken
的第二个参数需要是一个包含您要添加的自定义声明的对象。我的猜测是您链接的问题中的布尔值是旧版 SDK 中的有效调用。
最终目标:创建一个简单的 NodeJs 以提供 Firestore 自定义令牌。
当前暂定:我正在尝试这种方法
C:\WSs\FireStoreDemos\firestore-custom-token>node server
C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\firebase-admin\lib\auth\token-generator.js:205
throw new error_1.FirebaseAuthError(error_1.AuthClientErrorCode.INVALID_ARGUMENT, errorMessage);
^
FirebaseAuthError: `developerClaims` argument must be a valid, non-null object containing the developer claims.
at FirebaseAuthError.FirebaseError [as constructor] (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:42:28)
at FirebaseAuthError.PrefixedFirebaseError [as constructor] (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:88:28)
at new FirebaseAuthError (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\utils\error.js:147:16)
at FirebaseTokenGenerator.createCustomToken (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\auth\token-generator.js:205:19)
at Auth.BaseAuth.createCustomToken (C:\WSs\FireStoreDemos\firestore-custom-token\node_modules\[4mfirebase-admin[24m\lib\auth\auth.js:94:36)
at Object.<anonymous> (C:\WSs\FireStoreDemos\firestore-custom-token\server.js:32:14)
[90m at Module._compile (internal/modules/cjs/loader.js:1147:30)[39m
[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:10)[39m
[90m at Module.load (internal/modules/cjs/loader.js:996:32)[39m
[90m at Function.Module._load (internal/modules/cjs/loader.js:896:14)[39m {
errorInfo: {
code: [32m'auth/argument-error'[39m,
message: [32m'`developerClaims` argument must be a valid, non-null object containing the developer claims.'[39m
},
codePrefix: [32m'auth'[39m
}
所有 NodeJs 文件是:
server.js
const admin = require('firebase-admin');
exports.serviceAccount = {
"type": "service_account",
"project_id": "angular-firebase-auth0-3c084",
"private_key_id": "6ba2ba41e0bf3837841aa9772c7d880b7ce3be81",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEv ... deleted ... 2PV9xsYvkt8+8Ce79fYKA=\n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-lu97a@angular-firebase-auth0-3c084.iam.gserviceaccount.com",
"client_id": "114324662014690107039",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-lu97a%40angular-firebase-auth0-3c084.iam.gserviceaccount.com"
}
admin.initializeApp({
credential: admin.credential.cert(exports.serviceAccount)
});
var uid = "NSBFu2YJNDgLQJCZ99dRJlP4DRo2"; //copied from https://console.firebase.google.com/project/firetestjimis/authentication/users
var claim = {
control: true
};
admin.auth().createCustomToken(uid, true)
.then(function (customToken) {
console.log(customToken)
})
.catch(function (error) {
console.log("Error creating custom token:", error);
});
package.json
{
"name": "firebase-auth0-nodeserver",
"version": "0.1.0",
"description": "Node.js server to provide custom auth token.",
"repository": "",
"main": "server.js",
"scripts": {
"start": "node server"
},
"author": "Auth0",
"license": "MIT",
"dependencies": {
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"express": "^4.17.1",
"express-jwt": "^5.3.3",
"firebase-admin": "^8.10.0",
"jwks-rsa": "^1.8.0"
},
"devDependencies": {}
}
如果它添加了一些东西,我设法部署了一个 Cloud Function,returns 一个带有 bellow 打字稿的自定义令牌。尽管如此,我需要在我们的本地服务器中使用相同的方法。
import * as functions from 'firebase-functions';
import * as admin from "firebase-admin";
export const getCustomToken = functions.https.onRequest((request, response) => {
if (admin.apps.length < 1) { //Checks if app already initialized
admin.initializeApp();
}
const uid = "NSBFu2YJNDgLQJCZ99dRJlP4DRo2";
admin.auth().createCustomToken(uid)
.then(function (customToken) {
console.log(customToken.toString);
response.send(customToken);
})
.catch(function (error) {
console.log("Error creating custom token:", error);
});
});
*** 已编辑 感谢 Frank 的回答,我通过“... admin.auth().createCustomToken(uid).then...”解决了这个问题。
然而,生成的自定义令牌似乎没有用(或者我可能理解错了)。
我希望有一个令牌,让我可以 post 将文档发送到 Firestore。好吧,使用上面的 Cloud Function,我得到了一个令牌,然后我 post 它到 googleapis。com/identitytoolkit/v3/relyingparty/verifyCustomToken 其中 returns 一个 idToken,我可以使用它来 post 文档到 Firestore 集合。我知道上面的 NodeJs 服务器会生成一个与我从上面的 Cloud Function 生成的令牌具有相同特征的令牌,但我似乎弄错了重点。
基本上,我正在尝试
如果你有这样的语法问题,文档是你的朋友。来自 Auth.createCustomToken
的参考文档:
createCustomToken(uid: string, developerClaims?: Object): Promise<string>
...
Parameters
uid: string
The uid to use as the custom token's subject.Optional
developerClaims: Object
Optional additional claims to include in the custom token's payload.
因此 createCustomToken
的第二个参数需要是一个包含您要添加的自定义声明的对象。我的猜测是您链接的问题中的布尔值是旧版 SDK 中的有效调用。