2016-09-30 67 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和GET方法PARAMS有一些衝突。

我是對的嗎?我應該爲此做些什麼?

回答

0

問題解決了從客戶端發送相同的參數!

正如我所說的,問題是GET方法&護照連接。 護照功能只從req.query讀取,它只在POST方法上,但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

不工作,我的PARAMS是激活和用戶名沒有電子郵件和密碼 –

+0

@ShriramManoharan我沒有看到任何地方,除了那些領域也可以看到他們的文檔https://github.com/jaredhanson/passport-local – abdulbarik