Создайте маршрутный логин для администратора каждой компании - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь создать URL-адрес маршрута входа для каждого профиля администратора компании.

Ранее я пробовал с тем же подходом, когда была одна схема.Теперь я пытаюсь сделать то же самое во вложенной структуре и нахожу это немного сложным.

Теперь я хочу, чтобы мой URL-адрес маршрута был таким: - router.post('/:compId/admin/login')

У меня гораздо меньше идей, как оно естьНовое для меня, чтобы создать маршрут для каждого документа.

Мой контроллер: -

var admin = new Admin();
    admin.companyName = req.body.companyName;
    admin.address = req.body.address;
    admin.contactDetails  = req.body.contactDetails;
    admin.admins = {
                  email : req.body.email,
                  password: req.body.password, 
                  firstName : req.body.firstName, 
                  lastName : req.body.lastName,
                  phoneNumber : req.body.phoneNumber,
                  designation : req.body.designation,
                  role : "admin",
                  verified :"false",
                  users: []
    };

Это то, что я пытался в логин маршрута: -

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

    Admin.find({'admins.email': req.body.email},{ 'admins.companyId': req.params.compId })
    .exec()
    .then(admin => {
        if(admin.admins.length < 1) {
            return res.status(401).json({
                message: "Auth failed. admin not found."
            })
        }
        bcryptt.compare(req.body.admins.password, admin.admins[0].password, (err, result) =>{
            if (err) {
                return res.json({
                message: "Auth failed. Check email and password"
                });             
            }                   
            if (result && admin.admins[0].verified === "true"){
                const adminEmaill = "rgg@xyz.com";                                                  //assaigning a user to admin 
                const role1 = admin.admins[0].email===adminEmaill? "superadmin" : "admin";                                  //check user id as admin or user
                const token = jwt.sign( 
                    {
                        email: admin.admins[0].email,
                        phoneNo: admin.admins[0].phoneNumber,
                        role1,
                        comID: admin.admins[0].companyID
                    },
                    process.env.JWT_KEY,
                    {
                        expiresIn : "1h"
                    });
                    return res.status(200).json({
                    message: "Auth Successful",
                    token : token
                    }); 
            }
            else{
                console.log("admin is not verified");   
                return res.json({
                message: "Admin is not verified"
                }); 
            }
        });
    })
    .catch(err =>{
        if (err.code == 500)
                    res.status(500).send(["Something went wrong in login"]);
            else
            return next(err);
    }); 
});

И мои ответные данные: -

[{
    "admins": {
        "email": "angjun.34@test-mail.info",
        "password": "$2a$10$QgCJ4IaYXZK9JZIkLv2X9O/wnFpn0LEhFQujBco0M0TF2.X7OgDmW",
        "firstName": "hdsdsds",
        "lastName": "Ghodsdsdsh",
        "phoneNumber": "4544343",
        "designation": "Software Engineer",
        "role": "admin",
        "verified": "false",
        "users": [],
        "emailResetTokenn": "247c6e6794d15a311670da0bb13a4a8bf773b0e7f7b5dde0e555f421e2aef22f",
        "emailExpires": "2019-05-22T15:05:43.974Z",
        "saltSecret": "$2a$10$QgCJ4IaYXZK9JZIkLv2X9O"
    },
    "_id": "5ce510e7aca42c4c74fd9085",
    "companyName": "TEST",
    "address": "UAE",
    "contactDetails": "54534454",
    "companyID": "1223365",
    "__v": 0
},
{
    "admins": {
        "email": "groham.224@test-mail.info",
        "password": "$2a$10$QgCJ9O/wnFpn0LEhFco0M0TF2.X7OgDmW",
        "firstName": "hdsdsds",
        "lastName": "Ghodsdsdsh",
        "phoneNumber": "4544343",
        "designation": "Software Engineer",
        "role": "admin",
        "verified": "false",
        "users": [],
        "emailResetTokenn": "247c6e6794d15a311670da0bb13a4a8bf773b0e7f7b5dde0e555f421e2aef22f",
        "emailExpires": "2019-05-22T15:05:43.974Z",
        "saltSecret": "$2a$10$QgCJ4IaYXZK9JZIkLv2X9O"
    },
    "_id": "5ce510e7aca42c4c74fd9085",
    "companyName": "RESTFUL Pvt Ltd",
    "address": "UK",
    "contactDetails": "54534454",
    "companyID": "155165",
    "__v": 0
}]

Вопрос

  • Итак, как создать login для каждогоrouter.post('/:compId/admin/login') администраторов этих компаний, чтобы при входе в систему JWT передавался только объект данных соответствующей компании.Маршрут входа, который я добавил, не работает.

Пример: - Предположим, что для второго маршрута компании будет ('/155165/admin/login')

1 Ответ

0 голосов
/ 22 мая 2019

Похоже, что вы используете неправильный запрос companyID не является потомком admins

Таким образом, запрос должен быть

Admin.find({'admins.email': req.body.email},{ 'companyID': req.params.compId })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...