node.js - 使用 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");
解决方案
所以,我不确定为什么这会有所帮助,但我没有使用nvm
更新节点,而是使用n
了节点版本管理器。这似乎对我有用。
如果有人知道为什么会出现这种情况,那么知道这可能会很好。
推荐阅读
- java - 在 Spring Boot/Netty 中更改错误日志记录
- objective-c - 拍摄与显示尺寸不同的照片
- wordpress - 如何从 Yoast 中的面包屑链接中删除 slug 父级
- html - 如何将` `字体真棒图标垂直居中
- ionic-framework - Ionic 4 modal 永远不会从 DOM 中删除
- php - 使用 updateOrCreate 检查记录是否存在,如果记录存在于 laravel 5.5 中,则进行数学运算(SUM)
- coq - 在 Coq 中将临时列表转换为依赖类型列表
- java - 如何根据用户角色限制对 JSP 的提交操作?
- c++ - 我将如何取消分配?
- java - 如何在 Eclipse/Gradle/Java 项目中为项目名称和根项目目录设置不同的名称?