【问题标题】:secretOrPrivateKey must have a valuesecretOrPrivateKey 必须有一个值
【发布时间】:2019-02-23 23:57:56
【问题描述】:

我正在尝试学习 nodejs 并使用 jwt 为用户创建令牌。但我在服务器端收到此错误:secretOrPrivateKey must have a value。这是很多代码,所以我将给出我认为重要的内容(如果您需要其他内容,请告诉我):

user.js:

const config = require('./../config/config').get(process.env.NODE_ENV);
...
userSchema.methods.generateToken = function(callback) {
    console.log(config.SECRET); // THIS IS UNDEFINED
    var token = jwt.sign(this._id.toHexString(), config.SECRET);

    this.token = token;
    this.save(function(err, user) {
        if (err) return callback(err);
        callback(null, user)
    });
}

server.js:

app.post('/api/login', (req, res) => {
    User.findOne({'email': req.body.email}, (err, user) => {
        ...    
        user.generateToken((err, user) => {
            if (err) return res.status(400).send(err);

            res.cookie('auth', user.token).json({
                isAuth: true,
                id: user._id
            })
        })
    })
})

config.js:

const config = {
    production: {
        SECRET: process.env.SECRET,
        DATABASE: process.env.MONGODB_URI
    },
    default: {
        SECRET: 'SUPER_SECRET-PASSWORD!123?',
        DATABASE: 'mongodb://localhost:27017/feedback'
    }
}

exports.get = function get(env) {
    return config[env] || config.default
}

【问题讨论】:

  • 你使用的node命令是什么?如果您使用 node server.js 它是否返回默认值。你可以在你的exports.get()中放一个console.log
  • 哦!您介意将您的评论放在官方答案中,以便我可以将其标记为答案。我使用的是 nodemon server.js,但是当我现在尝试使用 node server.js 时,我的服务开始工作了。请您介意解释一下为什么会这样以及如何使用 nodemon 使其工作:) 我对此很陌生

标签: node.js mongoose jwt


【解决方案1】:

我认为您对节点的调用可能是错误的。试试 node server.js,你应该得到默认配置。您还可以在 export.get() 中放置一个 console.log,以查看它作为环境变量发送的内容。

【讨论】:

  • 完美答案,谢谢!但就像我在评论中所说的那样,当我使用nodemon server.js 时,你介意解释一下这个问题以及如何让它工作吗?请:)
  • 哦,等等,由于某种原因,nodemon server.js 现在也在工作。也许只是服务器停止和启动是必要的?
  • 我通常使用forever作为我的节点监视器,但他们最终都会调用node。
【解决方案2】:

就我而言,我有这个文件夹结构。

  • 项目

    • 前端

    • 后端

      • index.js
      • .env

我遇到了错误“secretOrPrivateKey 必须有一个值”,因为终端位于 Project 文件夹中,而我运行了 nodemon backend/index.js。我没有在带有 .env 文件的正确文件夹中运行后端。 cd backend && nodemon index.js 帮助

【讨论】:

    【解决方案3】:

    我认为您的配置有问题。您唯一导出的是函数 get。所以 config.SECRET 是空的。你应该写 config.get().SECRET

    【讨论】:

    • 检查我如何在 user.js 中导入配置。在那里你会看到我已经在那里调用了 .get 函数......如果我将它更改为 config.get().SECRET 然后我收到错误 config.get is not a function
    猜你喜欢
    • 2022-10-23
    • 2020-02-28
    • 2022-06-18
    • 2021-01-17
    • 2010-12-26
    • 2017-02-05
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多