首页 > 解决方案 > 使用 nvm 后节点版本未在执行时更新

问题描述

我正在运行一个节点服务器,它向浏览器发送和接收 cookie。我正在使用 firebase admin 创建会话 cookie 并对其进行验证。

router.post("/api/login", async function loginResponse(request, response) {
    response.header("Access-Control-Allow-Origin", "HTTP://aurl.com");
    const idToken = request.body.idToken.toString();

    const expiresIn = 60 * 60 * 24 * 5 * 1000;
    admin
        .auth()
        .createSessionCookie(idToken, { expiresIn })
        .then(
            async (sessionCookie) => {
                const options = { maxAge: expiresIn, httpOnly: true };
                response.cookie("session", sessionCookie, options);
                console.log(sessionCookie);
                result = h.setResult(
                    { idToken },
                    true,
                    "login cookie set",
                    h.errorEnum.NONE
                );
                return await c.simpleResponse(result, response);
            },
            (error) => {
                console.log(error.code, request.data);
                error.code == "auth/invalid-id-token"
                    ? response
                          .status(401)
                          .send({ msg: "UNAUTHORIZED REQUEST!" })
                    : console.log(error);
            }
        );
});

在前端,我已将凭据设置为“包含”在请求标头中,以确保正在发送 cookie(尽管我不能 100% 确定这是否能解决问题)。

document
    .getElementById("login")
    .addEventListener("submit", (event) => {
        event.preventDefault();
        const login = event.target.login.value;
        const password = event.target.password.value;
        console.log(login, password);
        firebase
            .auth()
            .signInWithEmailAndPassword(login, password)
            .then(({ user }) => {
                return user.getIdToken().then((idToken) => {
                    console.log(idToken);
                    return fetch(
                        "http://aurl.com:3001/api/login",
                        {
                            method: "POST",
                            headers: {
                                Accept: "application/json",
                                "Content-Type":
                                    "application/json",
                            },
                            credentials: "include",
                            body: JSON.stringify({
                                idToken,
                            }),
                        }
                    );
                });
            })
            .then(() => {
                return firebase.auth().signOut();
            })
            .catch((err) => {
                console.log(err.message);
            });
        return false;

但是,我的问题似乎与所有这些无关。由于某种原因,其中一个软件包似乎存在问题。

每次从前端发出请求,后端都会报错

ReferenceError: BigInt is not defined
    at Object.<anonymous> (/home/ubuntu/backend/node_modules/jose/lib/help/rsa_primes.js:6:14)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at Module.Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:80:39)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/ubuntu/backend/node_modules/jose/lib/help/key_utils.js:9:23)

我似乎无法确定为什么会出现这个问题。我认为问题可能来自名为“jose”的 node_module,因此我将节点版本更新为 14.17.1。根据“jose”包,它与这个版本兼容,所以我不确定出了什么问题。来源:https ://www.npmjs.com/package/jose

如果有帮助,这是我正在使用的模块列表:

const https = require('https');
const fs = require('fs');
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const cookieParser = require("cookie-parser");
const admin = require("firebase-admin");

标签: node.jsfirebaseauthenticationsessioncookies

解决方案


所以,我不确定为什么这会有所帮助,但我没有使用nvm更新节点,而是使用n了节点版本管理器。这似乎对我有用。

如果有人知道为什么会出现这种情况,那么知道这可能会很好。


推荐阅读