Не удалось войти в систему с помощью jwt в ответ - PullRequest
0 голосов
/ 24 мая 2019

Прошло много часов с тех пор, как я пытался понять это, но не смог найти решение для этого.

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

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

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

        Admin.find({ 'admins.email': req.body.email} , {companyID: req.params.compId})
        .exec()
        .then(admin => {
            if(admin.admins.length < 1) {
                return res.status(401).json({
                    message: "Auth failed. admin not found."
                })
            }
            else{
                    console.log("nothing happened");    
                }
            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 = "ggh@xyz.com";                                                  //assaigning a user to admin 
                    const role2 = 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,
                            role2,
                            comID: admin[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);
        }); 
    });

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

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: []
    };

Это мои документы: -

[{
    "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
}]
  • Каждый администратор компании может передать только весь объект своей компании.

  • Какие изменения я должен сделать, чтобы вернуть токен JWT здесь?На данный момент я не обращаюсь к серверу.

  • Это потому, что мои администраторы if(admin.admins.length < 1) не находятся в массиве?

РЕДАКТИРОВАТЬ: - Попробовал это, изменив URL-адрес, но получить аутентификацию не удалось получить ответ здесь.

bcryptt.compare(req.body.password, admin.admins.password, (err, result) =>{
                if (err) {
                    return res.json({
                    message: "Auth failed. Check email and password"
                    });             
                } 

1 Ответ

1 голос
/ 24 мая 2019

Без дополнительной информации о том, какую ошибку вы получаете, ее не так просто отладить.Одна потенциальная проблема, которую я вижу, заключается в следующей строке:

if (result && admin.admins[0].verified === "true"){

Если свойство admins.verified вашего документа является логическим, то приведенная выше строка всегда будет иметь значение false и откат к предложению else.Так что, если это так, то удалите кавычки:

if (result && admin.admins[0].verified === true){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...