2016-09-30 10 views
0

私は、電子メールアドレスにアクティベータコードを送信してユーザーの電子メールアドレスを確認しようとしています。ユーザがアクチベータURL(GETメソッド)をクリックすると、サーバはアクティベータコード+ユーザ名を比較し、それを処理しようとします。パスポートjs(GETメソッド付き)

私はこのようなGETメソッドを使用しています:

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'); 
        }); 
       }); 
     }) 
    ); 
}; 

しかし、サーバーの応答は次のとおりです:

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がある{ message: 'Missing credentials'} それはパスポートのJSだとメソッドの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

が機能していない、私のパラメータがアクチベータで、ユーザ名が電子メールとパスワードではありません –

+0

@ShriramManoharanこれらのフィールド以外の場所も表示されませんでした。https://github.com/jaredhanson/passport-local – abdulbarik

関連する問題