Почему я не могу аутентифицировать зарегистрированного пользователя для этого простого приложения MEAN? - PullRequest
0 голосов
/ 14 апреля 2020

Прежде всего, позвольте мне дать вам теплое спасибо, что подумали над этим вопросом.

Итак, в чем проблема?

(Это простая проблема для большинства из вас, гроссмейстеров!)

Ну, пользователь может быть зарегистрирован в этом простом приложении. Но по какой-то причине аутентификация не работает . Это некоторая причина - это то, что мои мозговые нервы с трудом понимают! Испробовав все возможные решения в течение многих часов, этот новичок-новичок ie решил отправиться в убежище ветеранов здесь, в StackOverflow!

Позвольте мне дать вам код, чтобы вы могли сбросить меня немного яркого света!

Ниже приведен снимок кода, написанного для аутентификации

//Authenticating the user

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

    const username = req.body.username;
    const password = req.body.password;



    User.getUserByUsername(username, (err, user) => {
        if (err) throw err;

        if (!user) {

            return res.json({
                sucess: false,
                msg: 'There is no such user found here'
            });
        }

        User.comparePassword(password, user.password, (err, isMatch) => {

            if (err) throw err;
            if (isMatch) {
                const token = jwt.sign(user.toJSON(), config.secret, {
                    expiresIn: 604800 // 1 week
                });
                res.json({

                    success: true,
                    token: 'JWT' + token,
                    user: {

                        id: user._id,
                        name: user.name,
                        username: user.username,
                        email: user.email
                    }

                });
            } else {

                return res.json({
                    success: false,
                    msg: 'Enter the correct details!'
                });

            }

        });



    });



});


//Getting into the dashboard

router.get('/profile', passport.authenticate('jwt', {
        session: false
    }),
    (req, res, next) => {

        res.json({
            user: req.user
        });

    });

Следующие несколько фотографий на вашем пути показывают вам запросы POSTMAN, которые выполняются этим новичком.

Здесь выполняется почтовый запрос для регистрации пользователя, и, как вы можете видеть, там нет проблем; пользователь, без сомнения, зарегистрирован!

**postman pic**

Вот аутентификация, выполненная с помощью POSTMAN

postman pic2

Но теперь, по какой-то причине (которую я не имею ни малейшего понятия), пользователь НЕ аутентифицирован. Это проблема, которую мне нужно решить.

Вот код файла модели / пользователя. js файл на тот случай, если вы хотите узнать, что там тоже

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const config = require('../config/database');

// These are the collection or entities in ERD language
const UserSchema = mongoose.Schema({

    name: {
        type: String
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    }
});

const User = module.exports = mongoose.model('user', UserSchema); //User is the name give for this particular model's schema

// these are functions implemented to do a certain task
module.exports.getUserById = function (id, callback) {

    User.findById(id, callback);
}

module.exports.getUserByUsername = function (username, callback) {
    const query = {
        username: username
    }

    User.findOne(query, callback);

}

module.exports.addUser = function (newUser, callback) {

    bcrypt.genSalt(10, (err, salt) => {
        bcrypt.hash(newUser.password, salt, (err, hash) => {
            if (err) throw err;
            newUser.password = hash;
            newUser.save(callback);

        });
    })

}


//comparing the hash password

module.exports.comparePassword = function (candidatePasword, hash, callback) {

    bcrypt.compare(candidatePasword, hash, (err, isMatch) => {
        if (err) throw err;
        callback(null, isMatch);
    });
}

Спасибо за потраченное время!

Кстати, будьте в безопасности!

edit1: код для регистрации или регистрации.

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

    let newUser = new User({
        name: req.body.name,
        email: req.body.email,
        username: req.body.username,
        password: req.body.password

    });

    User.addUser(newUser, (err, user) => {

        //console.log("registration is working");

        if (err) {
            res.json({
                sucess: false,
                msg: 'Hey! Enter the correct information man!'

            });
        } else {
            res.json({
                success: true,
                msg: 'you are registered'

            });
        }
    });

});

Вот целые маршруты / пользователи. js файл для вас, чтобы ссылаться

const express = require('express');
const router = express.Router();
const passport = require('passport');
const jwt = require('jsonwebtoken');
const User = require('../models/user');
const config = require('../config/database');





// Signingup the user

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

    let newUser = new User({
        name: req.body.name,
        email: req.body.email,
        username: req.body.username,
        password: req.body.password

    });

    User.addUser(newUser, (err, user) => {

        //console.log("registration is working");

        if (err) {
            res.json({
                sucess: false,
                msg: 'Hey! Enter the correct information man!'

            });
        } else {
            res.json({
                success: true,
                msg: 'you are registered'

            });
        }
    });

});


//Authenticating the user

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

    const username = req.body.username;
    const password = req.body.password;



    User.getUserByUsername(username, (err, user) => {
        if (err) throw err;

        if (!user) {

            return res.json({
                sucess: false,
                msg: 'There is no such user found here'
            });
        }

        User.comparePassword(password, user.password, (err, isMatch) => {

            if (err) throw err;
            if (isMatch) {
                const token = jwt.sign(user.toJSON(), config.secret, {
                    expiresIn: 604800 // 1 week
                });
                res.json({

                    success: true,
                    token: 'JWT' + token,
                    user: {

                        id: user._id,
                        name: user.name,
                        username: user.username,
                        email: user.email
                    }

                });
            } else {

                return res.json({
                    success: false,
                    msg: 'Enter the correct details!'
                });

            }

        });



    });



});


//Getting into the dashboard

router.get('/profile', passport.authenticate('jwt', {
        session: false
    }),
    (req, res, next) => {

        res.json({
            user: req.user
        });

    });



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

    let newUser = new User({
        username: req.body.username,
        password: req.body.password
    });

    User.addUser(newUser, (err, user) => {

        if (err) {
            res.json({
                success: false,
                msg: "Enter the correct information"
            });
        } else {
            res.json({
                success: true,
                msg: "User loggedIn"
            });
        }

    });
});

module.exports = router;

1 Ответ

1 голос
/ 14 апреля 2020

В вашей схеме нет поля username, но ваш запрос {username: username}. Вот почему вы не можете найти ни одного совпадения пользователя и получить ответ "Здесь такого пользователя не найдено". Измените запрос на {name: username}, чтобы решить проблему.

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