繁体   English   中英

Node.js如何通过基本Passport.js在数据会话中维护所需的数据

[英]Node.js How to maintain the desired data in the data session through the base Passport.js

护照-护照-vkontakte.js会将数据存储在数据库中,但护照-local.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:mydatabase@127.0.0.1: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
       });
}
));

我变了...

您忘记了var LocalStrategy = require('passport-local').Strategy;结尾处的.Strategy var 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 */));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM