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
});
}
));
我已經改變了......
我有增加了對LocalStrategy的策略。它沒有幫助。 已添加使用的VKontakteStrategy和LocalStrategy。 – Keefred
問題是相關的。不要通過策略會話將數據存儲在數據庫中LocalStrategy – Keefred
問題已解決。回調函數已經是空: auth.post( '/登錄', passport.authenticate( '登錄',{failureRedirect: '/',}), 函數(REQ,RES){ }); – Keefred