2016-09-30 2 views
0

전자 메일 주소로 활성화 코드를 보내 사용자의 전자 메일 주소를 확인하려고합니다. 사용자가 액티베이터 URL (GET 메소드)을 클릭하면 서버는 액티베이터 코드 + 사용자 이름을 비교하여 처리합니다.GET 방식의 여권 js

이 같은 GET 방식을 사용하고 있습니다 :

router.get('/activator/:username/:activator', function(req, res, next){ 
     passport.authenticate('activator', function(err, user, info){ 
      if (err) {console.log('Error info: ', info);} 
      else if (!user) {console.log('User not found: ' , info)} 
      else {console.log('User activated')} 
      res.redirect('/'); 
     })(req, res, next) 
}); 

그리고 activator.js 것은 :

var LocalStrategy = require('passport-local').Strategy; 
var User = require('../models/user'); 

module.exports = function(passport){ 

    passport.use('activator', new LocalStrategy({ 
      usernameField: 'username', 
      passwordField: 'activator' 
     }, 
     function(username, password, done) { 
      User.findOne({username: username , activator: password}, 
       function(err, user){ 
        if (err){ 
         return done(null, false, 'User not found.'); 
        } 
        user.activate = true; 
        user.save(function (err) { 
         if (err) return handleError(err); 
         return done(null, user, 'Persistence Registration successful'); 
        }); 
       }); 
     }) 
    ); 
}; 

그러나 서버 응답은 다음과 같습니다 { message: 'Missing credentials'} 그것은 여권 JS 보인다 및 방법의 PARAMS을 얻는 것은 약간의 충돌이있다.

맞습니까? 그 일을 어떻게해야합니까?

답변

0

문제 해결 클라이언트 측에서 동일한 매개 변수를 보내!

내가 말했듯이 문제는 GET 방법 & 여권 연결에 대한 것이 었습니다. 여권 기능은 POST 메서드에만있는 req.query에서 읽기만하고 GET 메서드는 req.params를 사용하고 있습니다. 그게 진짜 문제가 될 수

router.get('/activator/:username/:activator', function(req, res, next){ 
     req.query = req.params; // GET to POST simulator! 
     passport.authenticate('activator', function(err, user, info){ 
      if (err) {console.log('Error info: ', info);} 
      else if (!user) {console.log('User not found: ' , info)} 
      else {console.log('User activated')} 
      res.redirect('/'); 
     })(req, res, next) 
}); 
0

전략 필드가 유효하지, emailpassword로 교체하고

module.exports = function(passport) { 

    passport.use('activator', new LocalStrategy({ 
     usernameField: 'email', 
     passwordField: 'password', 
    }, 
    function(username, password, done) { 
     User.findOne({ 
      username: username, 
      activator: password 
     }, 
     function(err, user) { 
      if (err) { 
      return done(null, false, 'User not found.'); 
      } 
      user.activate = true; 
      user.save(function(err) { 
      if (err) return handleError(err); 
      return done(null, user, 'Persistence Registration successful'); 
      }); 
     }); 
    })); 
}; 
+0

:

그래서 나는 내 응용 프로그램 코드를 변경? URL에서 매개 변수를 여권 인증에 액세스 할 수없는 것 같아요! –

+0

이 작동하지 않습니다. 내 매개 변수가 활성화 자이며 사용자 이름이 전자 메일 및 비밀번호가 아닙니다. –

+0

@ShriramManoharan 해당 필드를 제외하고 어디에서나 해당 필드를 볼 수 없었습니다. https://github.com/jaredhanson/passport-local – abdulbarik