Как создать админа и разрешить доступ к админ-панели в node.js? - PullRequest
0 голосов
/ 24 февраля 2019

Я очень плохо знаком с программированием и пишу персональный проект с использованием node.js, express, mongoDB и mongoose.Я написал большую часть этого сам, однако я нанял кого-то, чтобы помочь мне с более продвинутыми частями.Я потерял с ним связь и вернулся под капот, чтобы создать панель администратора, которую я мог бы использовать для написания постов в блоге и других вещей.Я пытаюсь написать промежуточное программное обеспечение, которое только позволяет мне получить доступ к маршруту.Однако это не работает.

function adminAuth(req, res, next){
      if(req.user.isAdmin){
        return next();
      } else {
        res.redirect("/");
      }
    }

Я немного озадачен синтаксисом, который он использовал для создания пользовательской схемы, и я не уверен, как добавить эту пару значений ключей isAdmin.Любая помощь в обновлении моих пользователей с помощью значения ключа isAdmin будет чрезвычайно полезна, а также поможет мне завершить промежуточное ПО, так как (req.user.isAdmin) не работает!(Если я не предоставлю необходимый код, извините за неопытность и скажите, что вы хотели бы увидеть).

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

const isAdmin = false;

      const passwordHash = await bcrypt.hash(req.body.password, saltRounds);

      const db = client.db(dbName);
      const col = db.collection('users');
      const user = {
        email, firstName, lastName, password: passwordHash, isAdmin,
      };

локальная стратегия

module.exports = function localStrategy() {


passport.use(new Strategy(
    {
      usernameField: 'email',
      passwordField: 'password',
      passReqToCallback: true
    }, (req, email, password, done) => {
      const url = process.env.MONGOLAB_URI;
      const dbName = 'giftgrab';

      (async function addUser() {
        let client;
    try {
      client = await MongoClient.connect(url);

      const db = client.db(dbName);
      const col = db.collection('users');

      const user = await col.findOne({ email });
      debug('Found user by email');
      debug(user);
      if (!user) {
        req.flash('error', 'The username or password is wrong');
        done(null, false);
      } else {
        const match = await bcrypt.compare(password, user.password);

        if (match) {
          done(null, user);
        } else {
          req.flash('error', 'The username or password is wrong');
          // we pass null because it did not error, just failed
          done(null, false);
        }
      }
    } catch (e) {
      debug(e.stack);
    }

    client.close();
  }());
}

1 Ответ

0 голосов
/ 25 февраля 2019

Вот маршрут Auth, который нанял кодер, который написал, что у меня возникают проблемы с расшифровкой, как передать новые данные в пользовательскую модель.

// add logic to check if the user is admin
const isAdmin = false;

// user data collected here. If you want to add an "isAdmin" property, this is the right place
const user = {
  email, firstName, lastName, password: passwordHash, isAdmin,
};

// checking if the user already exists
const check = await col.findOne({ email });

if (check) {
  req.flash('error', 'The user with this email already exists');
  res.redirect('back');
} else {
  // the user does not exist, insert a new one and authenticate
  const results = await col.insertOne(user);

  req.login(results.ops[0], () => {
    res.redirect('/');
  });
}

Это то, что связано сдобавление свойства isAdmin.Для использования req.user и req.isAuthenticated () вам понадобится Passport.js .Пользовательские данные, хранящиеся в вашем сеансе (req.user), определяются вашей стратегией паспорта, поэтому, если вы хотите использовать свойство isAdmin таким образом, вам нужно будет установить его там.

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