Rolebased Вход в приложение Node.js - PullRequest
0 голосов
/ 07 января 2020

Я сейчас пытаюсь разработать ролевую администрацию. Если пользователь создан в данный момент, «1» сохраняется в базе данных на «Admin». Если это обычный пользователь, здесь будет введено «2». Я хочу, чтобы это было прочитано из базы данных, и нужно провести различие, чтобы отобразилась соответствующая стартовая страница.

Что у меня есть:

user. js:

const express = require('express');
const router = express.Router();
const bcrypt = require('bcryptjs');
const passport = require('passport');
// Load User model
const User = require('../DB/models/User');
const { forwardAuthenticated } = require('../DB/config/auth');

//User Models
//const User = require('../DB/models/user');

// Login Page
router.get('/login', (req, res) => res.render('login'));

//New User MA
router.get ('/neuerUser_MA', (req, res) => res.render ('neuerUser_MA'));

// Register
router.post('/neuerUSer_MA', (req, res) => {
    const { username, admin, password, password2 } = req.body;
    let errors = [];

    if (password != password2) {
        errors.push({ msg: 'Passwords do not match' });
    }

    if (password.length < 6) {
        errors.push({ msg: 'Password must be at least 6 characters' });
    }

    if (errors.length > 0) {
        res.render('neuerUser_MA', {
            errors,
            username,
            admin,
            password,
            password2
        });
    } else {
        User.findOne({email: email}).then(user => {
            if (user) {
                errors.push({msg: 'Email or Username already exists'});
                res.render('neuerUser_MA', {
                    errors,
                    username,
                    admin,
                    password,
                    password2
                });
            } else {
                const newUser = new User({
                    username,
                    admin,
                    password
                });

                bcrypt.genSalt(10, (err, salt) => {
                    bcrypt.hash(newUser.password, salt, (err, hash) => {
                        if (err) throw err;
                        newUser.password = hash;
                        newUser
                            .save()
                            .then(user => {
                                req.flash(
                                    'success_msg',
                                    'You are now registered and can log in'
                                );
                                res.redirect('/users/login');
                            })
                            .catch(err => console.log(err));
                    });
                });
            }
        });
    }
});

// HOW I TRIED THE LOGIN:
router.post('/login', (req, res, next) => {
    if(User.admin=="1"){
    passport.authenticate('local', {
        successRedirect: '/buchungen/startseite_breuninger',
        failureRedirect: '/users/login',
        failureFlash: true
    })(req, res, next);
    }
    else {
        passport.authenticate('local', {
            successRedirect: '/buchungen/startseite_spediteur',
            failureRedirect: '/users/login',
            failureFlash: true
        })(req, res, next);
    }
});

module.exports = router;

Но чтение из базы данных не работает. Независимо от того, какое значение хранится в «Admin», всегда отображается стартовая страница из else {}.

Возможно, мой подход слишком прост. Я все еще начинающий;) Спасибо уже сейчас за помощь!

1 Ответ

0 голосов
/ 07 января 2020

Вы можете достичь своей цели, изменив метод маршрутизатора следующим образом

router.post(
'/login',
passport.authenticate('local', {
  failureRedirect: '/login'
}), (req, res) => {
  if (req.user.admin == "1") {
    res.redirect('/buchungen/startseite_breuninger');
  }
  else {
    res.redirect('/buchungen/startseite_spediteur');
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...