Получить данные, созданные только зарегистрированным пользователем - PullRequest
0 голосов
/ 24 марта 2020

Я начинаю приключение с Node.js и задаюсь вопросом, каков подход к проблеме загрузки данных, созданных вошедшим в систему пользователем. У меня уже есть токен с идентификатором пользователя и что теперь? Я думал, что с помощью API я верну идентификатор пользователя и сохраню его после входа в localstorage, а затем добавлю userId при сохранении данных в базу данных. Это хорошее решение или по-другому?

const mongoose = require('mongoose');

const Schema = mongoose.Schema;
const eventSchema = new Schema({
    name: String,
    description: String,
    date: String
});

module.exports = mongoose.model('event', eventSchema, 'events');


function verifyToken(req, res, next) {
  if ( !req.headers.authorization ) {
    return res.status(401).send('Unauthorized request');
  }
  const token = req.headers.authorization.split(' ')[1];
  if ( token === 'null' ) {
    return res.status(401).send('Unauthorized request');
  }
  const payload = jwt.verify(token, 'secretKey');
  // verify decode jwt token if is valid
  if ( !payload ) {
    return res.status(401).send('Unauthorized request');
  }
  req.userId = payload.subject;
  next();
}

1 Ответ

0 голосов
/ 30 марта 2020

Мне все еще может понадобиться дополнительная информация, тем не менее, позвольте мне попытаться помочь с тем, что у меня есть.

"Я думал, что с помощью API я верну идентификатор пользователя и сохраню его после входа в localstorage. «Это зависит от подхода, который вы используете, скажем, вы используете просто Express, Mon go, в этом случае вы можете сохранить, как вы делаете с req.userId, вы можете получить доступ к этой информации в любое время, когда пожелаете. Другими подходами могут быть отправка токена из внешнего интерфейса (например, Angular).

«добавить userId при сохранении данных в базе данных». если я правильно понял, да, это правильно. Вы используете req.userId для хранения этого идентификатора и используете его, чтобы убедиться, что текущий пользователь вошел в систему перед доступом к набору данных .

«Это хорошее решение», если оно работает, да, оно действительно.

«Разве оно решено по-другому?» да, вы можете держать ключ в интерфейсе, скажем, с помощью Angular, и отправлять его всякий раз, когда вам нужен доступ к набору данных.

Помните, что API в NodeJS не имеет состояния: вы не храните информацию от пользователя, просто токен, как кажется, что вы делаете.

Ваш код выглядит нормально, в чем проблема?

У меня есть несколько вопросов:

  • "загрузка данные, созданные зарегистрированным пользователем. " Вы можете быть более точным c, какой тип данных?
  • в чем проблема? вы получаете ошибки?

Curiosity

Мне не ясно, если вы делаете это, но один хороший способ использовать mon goose - это что-то вроде этого:

    const mongoose = require('mongoose');

    const Schema = mongoose.Schema;
    const eventSchema = new Schema({
        name: String,
        description: String,
        date: String
    });

    eventSchema.methods.verifyToken= function (req, res, next) {//now you can call this method externally, like you call an mongoose function such as schema.findone
      if ( !req.headers.authorization ) {
        return res.status(401).send('Unauthorized request');
      }
      const token = req.headers.authorization.split(' ')[1];
      if ( token === 'null' ) {
        return res.status(401).send('Unauthorized request');
      }
      const payload = jwt.verify(token, 'secretKey');
      // verify decode jwt token if is valid
      if ( !payload ) {
        return res.status(401).send('Unauthorized request');
      }
      req.userId = payload.subject;
      next();
    }

    module.exports = mongoose.model('event', eventSchema, 'events');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...