Паспорт локальной аутентификации не работает

Я строю приложение, используя MEAN STACK. Я хочу использовать паспортно-локальную аутентификацию для своей формы входа. Но во время отправки формы я получаю POST http://localhost/login 404 (Not Found), посмотрите мой код ниже. Это мой контроллер:

lyfee.controller('loginCtrl', ['$scope', '$http', function($scope, $http) {
    $scope.user = {};
    $scope.login = function() {
        //  var data = {User: $scope.user }
        //console.log($scope.user);
        console.log("login function call");
        $http.post('/login', $scope.user);
        console.log("login request send");


    }
}]);

и это мой server.js:

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
    function(username, password, done) {
        User.getUserByusername(username, function(err, user) {

            if (err) throw err;
            if (!user) {
                return done(null, false, {
                    message: 'Unknown USER'
                });

            }

            User.comparePassword(password, user.password, function(err, isMatch) {
                if () throw err;
                if (isMatch) {
                    return done(null, user);
                } else {
                    return done(null, false, {
                        message: 'Invalid password'
                    });
                }
            });
        });

    }));

app.post('/login',
    passport.authenticate('local', {
        successRedirect: '/',
        failureRedirect: '/login',
        failureFlash: true
    }),
    function(req, res) {
        res.redirect('/');

    });

в каком файле я должен написать функцию getUserByusername и comparePassword? и что это за ошибка, которую я делаю, исправьте ее и дайте мне несколько советов.

1 ответ

В вашей модели предположим, что User.js пишет функции, подобные этой:

/**
 * Check the user's password
 */
dbSchema.methods.comparePassword = function(candidatePassword, cb) {
    var status = this.password.localeCompare(candidatePassword.trim());
    if (status != 0) {
        return cb(err); 
    }
    cb(null, true);
};

затем используйте функцию как это

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({
      username: username
    }, function(err, user) {
      if (err) throw err;
      if (!user) {
        return done(null, false, {
          message: 'Unknown USER'
        });

      }
      /**
      * Check the user's password
      */
      User.comparePassword(password, user.password, function(err, isMatch) {
        if (err) throw err;
        if (isMatch) {
          return done(null, user);
        } else {
          return done(null, false, {
            message: 'Invalid password'
          });
        }
      });
    });
}));
Другие вопросы по тегам