node.js - 在 jwt 符号内使用 ENV 变量
问题描述
我在我的系统中使用 JWT,它工作得很好,我使用常规字符串作为我的SecretKey这是工作代码
export class CompanyResolver {
@Query(() => [Company])
companies() {
return Company.find();
}
@Query(() => Company)
async login(
@Arg("email") email: string,
@Arg("password") password: string,
): Promise<Company | null> {
const company = await Company.findOne({ where: { email } });
if (!company)
throw new Error("Company Not Found!!!");
if (!await bcrypt.compare(password, company.password))
throw new Error("Incorrect Password!!!");
const secret=process.env.JWT_SECRET;
console.log(secret)
company.accessToken = jsonwebtoken.sign({ company }, "12345", {
expiresIn: "30 days"
})
return company;
}
我已经在我的env文件中定义了我的秘密,这样做console.log(process.env.JWT_SECRET)
确实会给我我的密钥,这意味着没有问题但是问题是当我尝试使用它时
company.accessToken = jsonwebtoken.sign({ company }, secret, {
expiresIn: "30 days"
})
我明白了
Type 'undefined' is not assignable to type 'Secret'.
我是nodejs和TS的新手我提前为任何幼稚的错误道歉,有人可以指出这个问题吗?
解决方案
process.env
值类型是string | undefined
. 这意味着 Typescript 不保证每个process.env.MY_ENV_VAR
. undefined
如果未设置环境变量,它可能会返回,因此,请采取预防措施。
在这种情况下,这样的事情应该会有所帮助
if(secret){
company.accessToken = jsonwebtoken.sign({ company }, secret, {
expiresIn: "30 days"
})
} else {
// Handle the case where the variable is not set, may be throw exception
}
推荐阅读
- html - 无法用 eloquent 检索数据
- google-chrome - 为什么我不能在谷歌的模拟器中列出点击事件
- javascript - 如何在 PHP 中保持浏览器选项卡独立
- linux - 使用一个命令保存多个 docker 图像
- python - VScode 找不到非内置模块的定义
- npm - 意外字符 '#' (1:0) 您可能需要适当的加载程序来处理此文件类型。| #!/usr/bin/env 节点
- javascript - React material-ui Autocomplete的多个选定值?
- javascript - 数组组合作为数组
- java - HTTP 503 错误:以编程方式尝试从 Hashicorp 的 Vault (v1.5.5) 获取数据
- docker - 无法在 Docker 上访问 NginX 反向代理后面的 Kibana