2016-06-23 2 views
0

Так что я столкнулся с проблемой аутентификации с использованием локальной стратегии. Если я передаю недопустимые учетные данные или что-то неуспешное, я получаю соответствующую ошибку. Однако, если аутентификация прошла успешно, я получаю ошибку 404.NodeJS, Passport & Passport-Local

Я вырыл, и лучшая идея, с которой я столкнулся, - это удаление хранилища сеансов (которое, как представляется, происходит при сериализации пользователя). Кто-нибудь сталкивается с такой проблемой?

Вот некоторые из кода, если вам нужны какие-либо другие разделы кода, сообщите мне, я с радостью предоставил его.

Моя конфигурация паспорта:

var passport = require('passport'), 
User = require('mongoose').model('User'); 

module.exports = function() { 
    passport.serializeUser(function (user, done) { 
     done(null, user.id); 
    }); 

    passport.deserializeUser(function (id, done) { 
     User.findOne({ _id: id }, '-password -salt -__v', function (err, user) { 
      done(err, user); 
     }); 
    }); 

    require('./strategies/local')(); 
}; 

Моя Локальная конфигурация Стратегия:

var passport = require('passport'), 
    LocalStrategy = require('passport-local').Strategy, 
    User = require('mongoose').model('User'); 

module.exports = function() { 
    passport.use(new LocalStrategy({ 
     usernameField: 'email' 
    }, function (email, password, done) { 
     User.findOne({email: email}, function (err, user) { 
      if (err) { 
       return done(err); 
      } 

      if(!user || !user.active || !user.authenticate(password)) { 
       return done(null, false, { message: 'Authentication Failed'}); 
      } 

      return done(null, user); 
     }); 
    })); 
}; 

Все другие методы работы, я могу запросить БД, чтобы найти пользователя, я прошел через соответствуя хэш пароля с предоставленным паролем, все это, кажется, происходит нормально, и я получаю пользователя в конце LocalStrategy (я делаю это до окончательного done(null, user). В done(null, user.id) что-то происходит. Я пробовал переходить через i t, но то, что я получаю, кажется довольно запутанным (или я слишком глупым, чтобы понять это), поэтому я не могу сказать, что происходит на самом деле.

+1

Это звучит как призыв к 'passport.authentic ate() 'может быть неправильно настроен. Можете ли вы показать, как вы это используете? – robertklep

+0

Я ничего особенного не делает: 'app.route ('/ Войти') \t \t .post (passport.authenticate ('местный'));' мне не нужно делать какие-либо перенаправление или что-то еще, мне просто нужно вернуть объект пользователя обратно в интерфейс. Одна вещь, которая может быть полностью совпадением, недавно вызвала функцию crypto 'pbkdf2Sync' узла, чтобы жаловаться на то, что вызов ее без дайджеста был устаревшим, поэтому я добавил это, и теперь я сталкиваюсь с этим. - только что проверил это, все равно получите то же самое ... –

ответ

1

Это ваша установка маршрута:

app.route('/login').post(passport.authenticate('local')); 

Это будет генерировать 401 («Несанкционированное») при неудачной аутентификации, но если это удастся, нет ничего сконфигурировано произойдет дальше, так что вы будет получить 404.

Вы должны добавить явный „успех“ обработчик маршруту:

app.route('/login').post( 
    passport.authenticate('local'), 
    function(req, res) { 
    // This will only get called when authentication succeeded. 
    res.json({ user : req.user }); 
    } 
); 
+0

В этом случае объект запроса является «null». Что бы ни происходило в 'serializeUser()', бомбардирует любую из данных; –

+0

Итак, я сделал еще несколько копаний, наткнулся на «connect-mongo». Я использовал это, чтобы сохранить сеанс, в котором я обнаружил, что сессия паспорта хранится ... поэтому что-то должно бомбить внутри 'serializeUser()' самостоятельно (возможно после того, как он сделает вызов для сериализации самой информации пользователя). Я копаю в github паспорта, чтобы узнать, могу ли я найти что-нибудь. –

+0

Должно быть что-то еще теневое, другой проект, который я использовал, используя ту же систему, прекратил работать. В начале недели он работал отлично. Нет обновлений пакетов или что-то в этом роде ... Я могу попробовать это снова на своей домашней машине, посмотреть, что там происходит. –

Смежные вопросы