Как сделать так, чтобы несколько пользователей входили по одному маршруту - PullRequest
0 голосов
/ 13 марта 2019

У меня есть код для входа в систему.У меня есть 2 схемы одна пользователь и администратор.Сейчас у меня есть два URL-адреса маршрута входа в систему /login для обычных пользователей и супер-администратора , adminLogin для пользователей с правами администратора, а также супер-администратора .

Iхочу объединить эти две схемы только с одним маршрутом /login.

Вот мой код для /login маршрута, который совпадает с /adminLogin Только разница Пользователь и Admin (Схемы) в коде

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.json({
                message: "Auth failed. Check email and password"
                });             
            }


            if (result && user[0].isVerified === true){
                const adminEmail = "xyz@temp-mail.com";                                                 
                const role = user[0].email===adminEmail? "superadmin" : "user";     //---- Here in case of Admin schema -> "superadmin" : "admin";
                const token = jwt.sign( 
                    {
                        email: user[0].email,
                        userId: user[0]._id,
                        phoneNo: user[0].phoneNumber,
                        role            
                    },
                    process.env.JWT_KEY,
                    {
                        expiresIn : "1h"
                    });
                    return res.status(200).json({
                    message: "Auth Successful",
                    token : token
                    });
            }
            else{
                console.log("user is not verified");    
                return res.json({
                message: "User is not verified"
                }); 
            }

Как использовать Admin.find () для схемы администратора в той же функции входа в систему?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

вы можете использовать параметры запроса для отправки типа пользователя и можете получить эти параметры внутри функции контроллера в объекте req.query.

0 голосов
/ 13 марта 2019

Не изменяя свою схему, сначала выполните рефакторинг своего кода следующим образом:

function handle(find_func, base_role, req, res, next) {
     find_func( // your original code inside User.find, change "superadmin" : "user" to "superadmin" : base_role
     ...);
}

для обычного входа пользователя, позвоните

handle(User.find, "user", req, res, next);

для входа администратора, позвоните

handle(Admin.find, "admin", req, res, next);

Теперь вам нужно различить, является ли логин обычным пользователем или администратором.Не объединяя вашу администраторскую и пользовательскую схемы в одну более крупную схему с одним новым полем «роль», указывающим, является ли он обычным пользователем или администратором, вы можете запросить, находится ли имя пользователя в коллекции пользователей, и, если нет, запросить, находится ли оно в коллекции администраторов, затем вызватьсоответствующий handle.

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