Мангуст Игнорировать Требуется - PullRequest
0 голосов
/ 11 октября 2018

У меня есть User схема:

email: {
    type: String,
    required: true
},
name: {
    type: String,
    required: true
},
password: {
    type: String,
    required: true
}

Когда вы делаете POST (/api/user-add), я хочу, чтобы все поля были обязательными.Но когда я делаю логин (/api/login), тогда мне нужны только поля email и password.Моя проблема в том, что в коде входа в систему я в конечном итоге получаю эту функцию:

staffSchema.methods.generateToken = function(callback) {
    var token = jwt.sign(this._id.toHexString(), config.SECRET);

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

И здесь возникает ошибка, поскольку поле name обязательно для заполнения.Как мне обойти это.Я ищу что-то вроде этого, я предполагаю:

    this.save(function(err, staff) {
        if (err) return callback(err);
        callback(null, staff);
    }).ignoreRequired('name');

1 Ответ

0 голосов
/ 11 октября 2018

Когда вы входите в систему с помощью JWT токена, это базовый пример для генерации token и аутентификации user без хранилища token

Примечание:

Пример дляаутентифицировать пользователя без хранилища token в БД

* Способ входа

const jwt = require('./jwt');
userCtr.authenticate = (req, res) => {
  const {
    email, password,
  } = req.body;

  const query = {
    email: email,
  };

  User.findOne(query)
    .then((user) => {
      if (!user) {
        //return error user not found.
      } else {
        if (passwordHash.verify(password, user.password)) { // verify password
            const token = jwt.getAuthToken({ id: user._id });
            const userData = _.omit(user.toObject(), ['password']); // return user data
            return res.status(200).json({ token, userData });
        }

        //return error password not match
      }
    })
    .catch((err) => {
    });
};

* jwt.js

const jwt = require('jwt-simple');
const logger = require('./logger');

const jwtUtil = {};

jwtUtil.getAuthToken = (data) => {
  return jwt.encode(data, process.env.JwtSecret);
};

jwtUtil.decodeAuthToken = (token) => {
  if (token) {
    try {
      return jwt.decode(token, process.env.JwtSecret);
    } catch (err) {
      logger.error(err);
      return false;
    }
  }
  return false;
};

module.exports = jwtUtil;

* использование промежуточного программного обеспечения для предотвращения доступа другого маршрута .

userRouter.post('/update-profile', middleware.checkUser, userCtr.updateProfile);

* middleWare.js

middleware.checkUser = (req, res, next) => {
  const { headers } = req;

  if (_.isEmpty(headers.authorization)) {
    //return error
  } else {
    const decoded = jwt.decodeAuthToken(headers.authorization.replace('Bearer ', ''));
    if (decoded) {
      User.findOne({ _id: decoded.id })
        .then((user) => {
          if (user) {
            req.user = user;
            next();
          } else {
            //error
          }
        })
        .catch((err) => {
          //errror
        });
      req.user = decoded;
    } else {
      //error
    }
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...