2016-06-23 4 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); 
     }); 
    })); 
}; 

, 나는 사용자를 찾기 위해 DB를 조회 할 수 있습니다, 내가 해시 된 암호와 일치를 강화했다 제공되는 암호로 모든 문제가 발생하고 LocalStrategy의 끝에 사용자가 생깁니다 (최종 done(null, user)으로 만듭니다.) serializeUser()done(null, user.id) 무언가가 발생합니다. t. 그러나 내가 결국 들어 오기까지하는 것은 상당히 모호 해 보인다. (또는 나는 그것을 이해하기에는 너무 멍청하다.) 그래서 실제로 일어나고있는 일을 말할 수 없다.

+1

그것은 passport.authentic'에 대한 호출 같은 소리 ate()'가 제대로 구성되지 않을 수 있습니다. 어떻게 사용하고 있는지 보여줄 수 있습니까? 내가 거기에 특별한 아무것도 아니에요 – robertklep

+0

: 'app.route ('/ 로그인') \t \t .post (passport.authenticate ('지방')); 내가 어떤 리디렉션을 수행 할 필요가 없습니다' 또는 무엇이든, 나는 프론트 엔드로 사용자 객체를 되돌려 줄 필요가있다. 우연히 만날 수있는 한가지, 최근에 노드 암호화'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

다른 그늘진 일이 생겨야 만합니다. 동일한 시스템을 사용하는 또 다른 프로젝트가 종료되었습니다. 그것은 일주일 초에 잘 작동했습니다. 패키지 업데이트 나 그와 비슷한 것 ... 집에서 다시 시도해 볼 수 있습니다. 어떻게되는지보십시오. –

관련 문제