首页 > 解决方案 > 在 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的新手我提前为任何幼稚的错误道歉,有人可以指出这个问题吗?

标签: node.jstypescriptjwttypegraphql

解决方案


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
}

推荐阅读