Отдельный логин для администратора - PullRequest
0 голосов
/ 03 января 2019

Я успешно могу создать логин для обычных пользователей.Теперь я хочу иметь одинаковую конечную точку /login для экрана входа в систему как для обычного пользователя, так и для администратора.Я хочу создать user-admin с фиксированной электронной почтой, а гибкий пароль с сгенерированным токеном будет исправлен.

Я новичок в серверной маршрутизации Node.JS.

Это мой маршрут входа в систему : -

router.post('/login' , (req, res, next) => {

    User.find({email: req.body.email})
    .exec()
    .then(user => {
        if(user.length < 1) {
            return res.status(401).json({
                message: "Auth failed. User not found."
            })
        }
        bcrypt.compare(req.body.password, user[0].password, (err, result) =>{
            if (err) {
                return res.status(401).json({
                message: "Auth failed. Check email and password"
                });             
            }   
            if (result){
            const token = jwt.sign( 
                {
                    email: user[0].email,
                    userId: user[0]._id
                },
                process.env.JWT_KEY,
                {
                    expiresIn : "1h"
                });
                return res.status(200).json({
                message: "Auth Successful",
                token : token
                });
            }
        });
    })
    .catch(err =>{
        if (err.code == 500)
                    res.status(500).send(["Something went wrong in login"]);
            else
            return next(err);
    });
});

Что мне нужно добавить для моей административной части?

РЕДАКТИРОВАТЬ: -

user.model

var userSchema = new mongoose.Schema({
    fullName : {
                type: String,
                required: "Full name can't be empty"
                },
    email :     {
                type: String,
                required: "Email can't be empty",
                unique: true
                },
    password :  {
                type: String,
                required: "Password can't be empty",
                minlength: [6 ,"Password must be atleast 6 character long"]
                },  
    phoneNumber :   {
                type: String,
                required: "Reqired for further contact.Can't be empty"
                },
    saltSecret: String 
});

mongoose.model('User', userSchema);

user.controller

const mongoose = require ('mongoose');
const User = mongoose.model('User');
    module.exports.register = (req, res, next) =>{  

        var user = new User();
        user.fullName = req.body.fullName;
        user.email = req.body.email;
        user.password = req.body.password;
        user.phoneNumber = req.body.phoneNumber;
        user.save((err, doc) =>{
            if(!err)
                res.send(doc);
            else{
                if (err.code == 11000)
                        res.status(422).send(["Entered duplicate email address. Please check"]);
                else
                return next(err);
                }
        });
    }

1 Ответ

0 голосов
/ 03 января 2019

Вы можете добавить дополнительное поле role в коллекцию Users, которое может содержать значения user или admin (или массив значений, если имеется больше ролей).

Тогда, когдаВы создаете токен JWT, можете добавить к нему поле role.

const token = jwt.sign( 
{
    email: user[0].email,
    userId: user[0]._id,
    role: user[0].role
},
process.env.JWT_KEY,
{
    expiresIn : "1h"
});

Теперь вы можете использовать это значение, чтобы определить, является ли пользователь, вошедший в систему, администратором.

Вам может потребоваться создать новый API для преобразования пользователя в администратора (изменить поле роли) или сделать это непосредственно в базе данных в зависимости от ваших требований.

Если вы хотите полностью обрабатывать логику администратора с помощью кода(без каких-либо изменений в db), и вы уже знаете идентификатор электронной почты пользователя, которого вы хотите назначить администратором, тогда вы можете использовать следующую логику.

const adminEmail = "admin@example.com";
const role = user[0].email===adminEmail? "admin" : "user";
const token = jwt.sign( 
{
    email: user[0].email,
    userId: user[0]._id,
    role
},
process.env.JWT_KEY,
{
    expiresIn : "1h"
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...