2016-04-26 31 views
0

passport.js通過passport-vkontakte.js將數據存儲在數據庫中,但Passport-local.js不保存數據會話中的所需數據。Node.js如何通過Passport.js

如何使passport-local.js策略也將數據保存在數據庫中?

var pgSession = require('connect-pg-simple')(session); 
var pg = require('pg'); 

var passport = require('passport'); 
var LocalStrategy = require('passport-local'); 
var VKontakteStrategy = require('passport-vkontakte').Strategy; 

auth.use(session({ 
    store: new pgSession({ 
     pg: pg, 
     conString: 'http://postgres:[email protected]:5432/database', 
     tableName: 'session' 
    }), 
    secret: 'mysecret', 
    resave: false, 
    cookie: {maxAge: 30 * 24 * 60 * 60 * 1000}, // 30 days 
    saveUninitialized: true 
})); 
auth.use(passport.initialize()); 
auth.use(passport.session()); 
enter code here 
passport.use('login', new LocalStrategy({ 
    passReqToCallback : true 
}, 
function(req, username, password, done) { 
    // проверка в mongo, существует ли пользователь с таким логином 
    console.log('args - ' + arguments.length); 

    db.oneOrNone("SELECT * FROM users WHERE email = '"+username+"'") 
     .then(function (user) { 
      if (user) { 
      isValidPassword(user, password, function(res) { 
       if (res) { 
        console.log('Пользователь существует и пароль верен, возврат пользователя из'); 
        req.session.passport = {}; 
        req.session.passport.user = user; 
        return done(null, user); 
       } else { 
        console.log('Invalid Password'); 
        ///return done(null, 'Invalid Password'); 
       } 
      }); 

      // Пользователь существует и пароль верен, возврат пользователя из 
      // метода done, что будет означать успешную аутентификацию 

      } else { 
      // Пользователь не существует, ошибка входа и перенаправление обратно 
      console.log('User Not Found with username '+username); 
      //return done(null, 'User Not found.'); 
      } 
     }) 
     .catch(function (error) { 
      console.log('error: ' + error); 

      // В случае возникновения любой ошибки, возврат с помощью метода done 
      return done(err); 
     }); 
}) 
)); 

passport.use('vkontakte', new VKontakteStrategy({ 
    clientID:  VKONTAKTE_APP_ID, // VK.com docs call it 'API ID' 
    clientSecret: VKONTAKTE_APP_SECRET, 
    callbackURL: "http://auth.rilskill.com/vk/callback" 
}, 
function(accessToken, refreshToken, params, profile, done) { 
    db.oneOrNone("SELECT * FROM users WHERE id_vk = '"+profile.id+"'") 
     .then(function (user) { 
      if (user) { 
       return done(null, user); 
      } else { 
      var values = [ 
       profile._json.first_name, 
       params.user_id, 
       profile._json.last_name, 
       params.email 
      ]; 
      db.query('INSERT INTO users(first_name, id_vk, last_name, email) VALUES ($1, $2, $3, $4) RETURNING *', values) 
       .then(function(res) { 
        return done(null, res); 
       }) 
       .catch(function(error) { 
        return done('error in INSERT INTO table'); 
       }); 
      /*db.query("INSERT INTO users(id_vk,first_name,last_name,email)", obj) 
       .then(function(res) { 
        console.log(res); 
       }) 
       .catch(function(error) { 
        console.log(error); 
       });*/ 
      } 
     }) 
     .catch(function (error) { 
      console.log('error - ' + error); 
      return done('error in SELECT table'); 
      // В случае возникновения любой ошибки, возврат с помощью метода done 
     }); 
} 
)); 

我已經改變了......

回答

0

你忘了.Strategyvar LocalStrategy = require('passport-local').Strategy;

結束還有,我沒有看到你打電話

passport.use(new LocalStrategy({ 
    usernameField: 'mail', 
    passwordField: 'password' 
}, function (mail, password, done) { 
    // Check authentification and call : 
    done(null, user, message); 
})); 

而且

passport.use(new VKontakteStrategy(/* Your options here */)); 
+0

我有增加了對LocalStrategy的策略。它沒有幫助。 已添加使用的VKontakteStrategy和LocalStrategy。 – Keefred

+0

問題是相關的。不要通過策略會話將數據存儲在數據庫中LocalStrategy – Keefred

+0

問題已解決。回調函數已經是空: auth.post( '/登錄', passport.authenticate( '登錄',{failureRedirect: '/',}), 函數(REQ,RES){ }); – Keefred