Вопрос заключается в следующем: есть мидл, где объявляются сессии, при авторизации через вк инфа от контакта о пользователе связывается в бд (mysql) с его сессией, далее идет редирект на /groups, где сервер получает инфу об его группах, основываясь на информации в бд. В документации express-session видел такую штуку, как req.session.var, что мол можно создавать переменные в сессиях, но на деле в модуле с авторизацией я записываю в req.session.userId значение userId, в модуле получения групп эта переменная ubdefiend. Ниже приведу примеры кода. Подскажите, как можно решить проблему и вообще на правильном ли я пути
Middle:
module.exports = function(app, express) {
var path = require('path'),
config = require('../config'),
router = require('../routes');
mysql = require('mysql'),
session = require('express-session'),
MySQLStore = require('express-mysql-session')(session);
var options = {
host: config.get('host'),
port: 3306,
user: config.get('userDb'),
password: config.get('passDb'),
database: config.get('db'),
schema: {
tablename: 'main',
columnNames: {
session_id: 'session'
}
}
};
app.use(session({
secret: config.get("session:secret"),
resave: config.get("session:resave"),
saveUninitialized: config.get("session:saveUninitialized"),
cookie: config.get("session:cookie"),
store: new MySQLStore(options)
}));
router(app);
app.use(express.static(path.join(__dirname, '../public')));
app.use("/public", express.static(path.join(__dirname, '../public')));
};
Route
var main = require('./main'),
auth = require('./auth'),
groups = require('./groups'),
checkAuth = require('../middle/checkAuth');
// constructor = require('./constructor'),
// rates = require('./rates'),
// error = require('./error');
module.exports = function(app) {
app.get('/', main.home);
app.get('/public/enter', auth.getCode);
app.get('/tok', auth.getToken);
app.get('/group', checkAuth, groups.getGroups);
// app.get('/constructor', constructor.editBanner(groupId));
// app.post('/constructor', constructor.renderImg);
// app.get('/rates', rates.showRates(id));
// app.get('*', error['404']);
};
Auth (Аутентификацие через вк)
var urlRender = require('../middle/urlRender');
var request = require('request');
var db = require('../db/db'),
group = require('./groups');
function requestAsync(url) {
// return new Promise((resolve, reject) => {
request(url, function(error, response, body) {
if (error) {
console.log("error", error);
} else {
return body;
}
});
};
exports.getCode = function(req, res, next) {
res.redirect(urlRender.authUrl());
};
exports.getToken = function(req, res, next) {
if (req.query.code) {
req.session.userId = '';
var code = req.query.code;
request(urlRender.accessUrl(code), function(error, response, body) {
var tokenJSON = JSON.parse(body);
var token = tokenJSON['access_token'];
var userId = tokenJSON['user_id'];
req.session.userId = userId;
if (userId && req.session.id) {
req.session.save(function(err) {
if (err) {
console.log("err to save session", err)
}
db.insertMain(userId, token, req.session.id, "ms", res.redirect('group'));
console.log("req.session.userId", req.session.userId);
});
} else {
Console.log("There is no userid or req.session.id");
}
});
};
};
Groups (получение и запись инфы о группах)
var urlRender = require('../middle/urlRender');
var db = require('../db/db');
var request = require('request');
var mysql = require('mysql');
var config = require('../config');
var path = require('path');
var fs = require('fs');
var con = mysql.createConnection({
host: config.get('host'),
user: config.get('userDb'),
password: config.get('passDb'),
database: config.get('db')
});
var fs = require('fs');
var saveImg = function(url, i) {
return new Promise(function(resolve, reject) {
request.get({
url: url,
encoding: 'binary'
}, function(err, response, body) {
fs.writeFile(path.join(__dirname, '../lib/') + 'test' + i + '.jpg', body, 'binary', function(err) {
if (err) {
reject(err)
}
resolve();
});
});
});
};
module.exports.getGroups = function(req, res, next) {
var sql = "SELECT idvk, token FROM main INNER JOIN ms ON main.id=ms.idm INNER JOIN sessions ON ms.ids=sessions.id WHERE session='" + req.session.id + "'";
con.query(sql, function(err, results, fields) {
//не забыть сделать проверку на наличие сессии, иначе перенаправить на /tok
req.session.reload(function(err) {
if (err) {
console.log(err)
}
console.log("req.session.userid groups", req.session.userId);
});
var user = results[0]['idvk'];
var token = results[0]['token'];
request(urlRender.reqVk("groups.get", user, token, "&filter=admin&extended=1"), function(error, response, body) {
var groupJSON = JSON.parse(body);
var groups = groupJSON['response']['items'];
// console.log("groups", groups[0]);
fs.mkdirSync('' + req.session.userId + '');
for (var i = 0; i <= groups.length - 1; i++) {
saveImg(groups[i]['photo_200'], i).then(function() {
console.log("Img is on server");
})
.catch(function(err) {
console.log("something wrong with saving img", err);
});
}
});
if (err) {
console.log(err)
}
});
};
Виртуальный выделенный сервер (VDS) становится отличным выбором
Модифицирувать программу-калькулятор, чтобы она могла работать в любой системе счисления
Очень понравилось автодополнение в Inteliji Idea, но пересел работать за NetBeans и очень огорчён тем, что там автодополнение хуже, чем в IntelijiСуществует...
Нужно реализовать контакт-листВ самом элементе контакта содержится название и рядом с каждым контактом должны быть кнопки