在 jwt 符号中使用 ENV 变量

时间:2021-01-07 07:16:16

标签: node.js typescript jwt typegraphql

我在我的系统中使用 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 的新手,对于任何幼稚的错误,我提前道歉,有人能指出这个问题吗?

1 个答案:

答案 0 :(得分:1)

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
}