Ну, все, что я сделал, это ввел роль в мою пользовательскую схему, которая работает от 1 до 4, и я установил значение по умолчанию 4, которое представляет обычного пользователя, и 1-3 для другого уровня администратора, вот код, это может помочь кому-токогда-нибудь
Схема пользователя:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const UserSchema = new Schema({
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
role:{
type: Number,
default : 4,
},
date: {
type: Date,
default: Date.now
},
});
module.exports = User = mongoose.model('users', UserSchema);
А вот и маршрут регистрации пользователя
// @route POST api/users/register
// @desc Register user
// @access Public
router.post('/register', (req, res) => {
const { errors, isValid } = validateRegisterInput(req.body);
// Check Validation
if (!isValid) {
return res.status(400).json(errors);
}
User.find().sort({unitNo : -1}).then(user => {
const newUser = new User(
{
email: req.body.email,
password: req.body.password,
});
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser
.save()
.then(user => res.json(user))
.catch(err => console.log(err));
});
});
});
});
вот логин пользователя
// @route GET api/users/login
// @desc Login User / Returning JWT Token
// @access Public
router.post('/login', (req, res) => {
const { errors, isValid } = validateLoginInput(req.body);
// Check Validation
if (!isValid) {
return res.status(400).json(errors);
}
const email = req.body.email;
const password = req.body.password;
// Find user by email
User.findOne({ email }).then(user => {
// Check Password
bcrypt.compare(password, user.password).then(isMatch => {
if (isMatch) {
// User Matched
const payload = { id: user.id, name: user.name }; // Create JWT Payload
// Sign Token
jwt.sign(
payload,
keys.secretOrKey,
{ expiresIn: 20000600 },
(err, token) => {
res.json({
success: true,
token: 'Bearer ' + token
});
}
);
} else {
errors.password = 'Password incorrect';
return res.status(400).json(errors);
}
});
});
});
но для администратора, что там роли варьируются от 1 до 3, вот как выглядит логин
// @route Post api/admins/login
// @desc Login User / Returning JWT Token
// @access Public
router.post('/login', (req, res) => {
const { errors, isValid } = validateLoginInput(req.body);
// Check Validation
if (!isValid) {
return res.status(400).json(errors);
}
const email = req.body.email;
const password = req.body.password;
// Find user by email
User.findOne({ email }).then(user => {
// Check for Admin
if (!user) {
errors.email = 'User not found';
return res.status(404).json(errors);
}
// Check to see if level meet admin role(Her is where i check if it is the admin or the user)
if(user.role == 4){
errors.role = 'You are not allowed to view this page'
return res.status(404).json(errors);
}
// Check Password
bcrypt.compare(password, user.password).then(isMatch => {
if (isMatch) {
// User Matched
const payload = { id: user.id, name: user.name }; // Create JWT Payload
// Sign Token
jwt.sign(
payload,
keys.secretOrKey,
{ expiresIn: "7h" },
(err, token) => {
res.json({
success: true,
token: 'Bearer ' + token
});
}
);
} else {
errors.password = 'Password incorrect';
return res.status(400).json(errors);
}
});
});
});
Надеюсь, это когда-нибудь решит вопрос кого-то ...