首页 > 解决方案 > 如何在firebase云函数中正确地将signInWithEmailAndPassword()转换为createCustomToken()-Node js

问题描述

我想延长我的应用程序中用户令牌的默认到期时间。目前我使用 signInWithEmailAndPassword 函数,令牌持续一个小时。

我知道这可以使用 createcustomtoken 函数完成,但我对如何去做有点困惑。

这是我当前的登录功能:

exports.login = (req, res) => {
    const user = {
        email: req.body.email,
        password: req.body.password
    };

    firebase.auth().signInWithEmailAndPassword(user.email, user.password)
    .then((data) => {
        return data.user.getIdToken();
    })
    .then((token) => {
        return res.json({ token });
    })
    .catch((err) => {
        console.error(err);
            return res.status(403).json({ general: "Wrong credentials, please try again"})
    })
}

标签: javascriptnode.jsfirebasefirebase-authenticationgoogle-cloud-functions

解决方案


不幸的是,无法将到期时间延长超过 3600 秒,超过时间 (iat) 的问题。

在此文档中,您可以看到exp明确表示:

最多可以比 iat 晚 3600 秒。

自定义令牌文档

但是,您可以使用没有过期时间的刷新令牌来获取新令牌。

刷新令牌

如果您仍想创建自定义令牌,您可以执行以下操作:

const someJwt = jwtDecode<{ sub: string; email: string }>(someOtherTokenFromThirdParty)

// sub is the unique id for the apple user
const customToken = await admin.auth().createCustomToken(someJwt.sub, {
    ...extraClaims
})

推荐阅读