У меня появляется эта ошибка, когда я регистрирую нового пользователя на моем веб-сайте "secretOrPrivateKey должно иметь значение"!Node.js - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь зарегистрировать нового пользователя в приложении, но я всегда получаю эту ошибку «secretOrPrivateKey должен иметь значение».Сервер работает хорошо, когда я нажимаю на кнопку регистрации, но в то же время выдает эту ошибку.Я прикрепил ниже вывод из моего терминала, когда я регистрирую нового пользователя!

это файл index.js

    // load environment variables
require("dotenv").config();
const express = require("express");
const app = express();
const cors = require("cors");
const bodyParser = require("body-parser");
const errorHandler = require("./handlers/error");
const authRoutes = require("./routes/auth");
const messagesRoutes = require("./routes/messages");
const { loginRequired, ensureCorrectUser } = require("./middleware/auth");
const db = require("./models");
const PORT = process.env.PORT || 8081;

app.use(cors());
app.use(bodyParser.json());

app.use("/api/auth", authRoutes);
app.use(
  "/api/users/:id/messages",
  loginRequired,
  ensureCorrectUser,
  messagesRoutes
);

app.get("/api/messages", loginRequired, async function(req, res, next) {
  try {
    let messages = await db.Message.find()
      .sort({ createdAt: "desc" })
      .populate("user", {
        username: true,
        profileImageUrl: true
      });
    return res.status(200).json(messages);
  } catch (err) {
    return next(err);
  }
});

app.use(function(req, res, next) {
  let err = new Error("Not Found");
  err.status = 404;
  next(err);
});

app.use(errorHandler);

app.listen(PORT, function() {
  console.log(`Server is starting on port ${PORT}`);
});

это файл .env:

SECRET_KEY = urethndvkngkjdbgkdkdnbdmbmdbdf

Здесь я использую секретный ключ:

    const db = require("../models");
const jwt = require("jsonwebtoken");

exports.signin = async function(req, res, next) {
  try {
    // finding a user
    let user = await db.User.findOne({
      email: req.body.email
    });
    // Destructure some properties from the user
    let { id, username, profileImageUrl } = user;
    let isMatch = await user.comparePassword(req.body.password);
    // checking if their Password matches what we sent to the server
    if (isMatch) {
      // will make the token
      let token = jwt.sign(
        {
          id,
          username,
          profileImageUrl
        },
        process.env.SECRET_KEY
      );
      return res.status(200).json({
        id,
        username,
        profileImageUrl,
        token
      });
    } else {
      return next({
        status: 400,
        message: "Invalid Email/Password."
      });
    }
  } catch (e) {
    return next({ status: 400, message: "Invalid Email/Password." });
  }
};

exports.signup = async function(req, res, next) {
  try {
    // create a user using the user model
    let user = await db.User.create(req.body);
    let { id, username, profileImageUrl } = user;
    // create a token(signing a token)
    let token = jwt.sign(
      {
        id,
        username,
        profileImageUrl
      },
      // after siging in that object, pass the secret key
      process.env.SECRET_KEY
    );
    return res.status(200).json({
      id,
      username,
      profileImageUrl,
      token
    });
  } catch (err) {
    // if the validation fails
    if (err.code === 11000) {
      // respond with this msg
      err.message = "Sorry, that username and/or email is taken";
    }
    return next({
      status: 400,
      message: err.message
    });
  }
};

Когда я регистрирую нового пользователя, он работает, и пользователь добавляется в БД, но все еще получает ошибку.упомянутый «секретный или закрытый ключ должен иметь значение»:

Mongoose: users.insert({ messages: [], _id: ObjectId("5c797464ef55a33c70207df3"), email: 'test@test.com', username: 'test', password: '$2a$10$kU2QVvCMGWv84JbhD8DYs.QNVwQXeDvhxAmUPvLSA4TytiFqvNlkC', profileImageUrl: '', __v: 0 })
Mongoose: users.findOne({ email: 'test@test.com' }, { fields: {} })
Mongoose: users.insert({ messages: [], _id: ObjectId("5c797490ef55a33c70207df4"), email: 'test222@test.com', username: 'test222', password: '$2a$10$ALqubvIZ2xRSUr5GputTY.uRxQ77cGW9Fcgc8zlOjJ/aq3CBn1bj6', profileImageUrl: '', __v: 0 })
Mongoose: users.insert({ messages: [], _id: ObjectId("5c7974dfef55a33c70207df5"), email: 'test2222@test.com', username: 'test2222', password: '$2a$10$QKXt9EsOPMNDfubP4UuT8OK6tksz59ZZFYtHFY7AyfDh5zEiO2jWa', profileImageUrl: '', __v: 0 })

снимок экрана с ошибкой, когда я нажимаю на регистрацию

a screenshot from the error when i click on signup

1 Ответ

0 голосов
/ 03 марта 2019

SECRET_KEY = urethndvkngkjdbgkdkdnbdmbmdbdf

Удалите пробелы вокруг =.В оболочке (которую эмулирует dotenv ) вы не используете пробелы при назначении значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...