【发布时间】:2021-08-12 06:07:06
【问题描述】:
我在 nextjs 中有这段代码,它应该检查令牌是否有效,然后登录用户。
const firebaseAdmin = require("firebase-admin");
const serviceAccount = require ('../secret.json');
export const verifyIdToken = async (token) => {
if (!firebaseAdmin.apps.length) {
firebaseAdmin.initializeApp({
// credential: firebaseAdmin.credential.cert(serviceAccount),
credential: firebaseAdmin.credential.applicationDefault(),
databaseURL: "rtdb.firebaseio.com",
});
}
return await firebaseAdmin
.auth()
.verifyIdToken(token)
.catch((error) => {
throw error;
});
};
我将 windows 环境变量设置为 firebase 推荐的,并切换到使用applicationDefault(),因为我是understand,
ADC 可以自动找到您的凭据
问题是应用程序只能在本地运行。当我部署网站时,令牌未经过验证并产生错误。我通过云功能为 NextJs 应用程序提供服务。我该如何解决这个问题。 错误是
auth/invalid-credential
Must initialize app with a cert credential or set your Firebase project
ID as the GOOGLE_CLOUD_PROJECT environment variable to call verifyIdToken().
应用程序应该做的是检查服务器端以确定令牌是否有效。 如下
export async function getServerSideProps(ctx) {
try {
const cookies = nookies.get(ctx);
const token = await verifyIdToken(cookies.token);
// the user is authenticated!
const { uid, email } = token;
return {
props: {
userData: {
email: email,
uid: uid,
},
},
};
} catch (err) {
console.log(err.code)
console.log(err.message)
return { props: {
} };
}
}
【问题讨论】:
-
有什么错误?网站运行在什么类型的服务上?使用更多详细信息编辑您的问题。
-
我已经添加了错误日志。我正在使用 NextJS 通过云功能提供服务
-
你最近更新了
firebase-admin的安装版本吗?GOOGLE_CLOUD_PROJECT环境变量不适用于较新的 Cloud Functions 部署 -
我使用的是最新的 firebase-admin 9.8.0。较新的部署是什么意思
标签: node.js google-cloud-platform google-cloud-functions next.js