Добрый день!
Делаю авторизацию на сайте с помощью Вк, используя
passport-vkontakte, с одной стороны всё по инструкции, с другой - что-то ничего не выходит.
(Да и примеры в документации мягко говоря так себе. Ничего внятного я в них не увидел, поэтому если есть готовые реализации, прошу скинуть ссылки, буду собирать этот конструктор по примеру)
Вот до чего сейчас дошел:
var passport = require('passport');
var AuthVKStrategy = require('passport-vkontakte').Strategy;
app.use(require('express-session')({secret:'keyboard cat', resave: true, saveUninitialized: true}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new AuthVKStrategy(
{
clientID: vk_app_id, // VK.com docs call it 'API ID', 'app_id', 'api_id', 'client_id' or 'apiId'
clientSecret: vk_app_secret,
callbackURL: "http://localhost:3000/auth/vkontakte/callback"
},
function(accessToken, refreshToken, params, profile, done) {
// User.findOrCreate({ vkontakteId: profile.id }, function (err, user) {
// return done(err, user);
// });
return done(null, profile);
}
));
passport.serializeUser(function(user, done) {
// console.log(user.id);
console.log(user);
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
app.get('/auth/vkontakte',
passport.authenticate('vkontakte', {
scope: ['status', 'email', 'friends', 'notify'],
profileFields: ['email', 'city', 'bdate']
}),
function(req, res){
// The request will be redirected to vk.com for authentication, with
// extended permissions.
});
app.get('/auth/vkontakte/callback',
passport.authenticate('vkontakte', {
successRedirect: 'http://localhost:3000/vk',
failureRedirect: 'http://localhost:3000/fail'
})
);
app.get('/vk', function(req, res) {
//Here you have an access to req.user
res.send('ok')
// res.json(req.user)
console.log(req.user);
});
app.get('/logout', function (req, res) {
req.logout();
res.redirect(`http://localhost:3002`);
});
На основании вышесказанного у меня возникает несколько вопросов:
1. Что делают
passport.serializeUser
и
passport.deserializeUser
нужны ли они вообще. + при выполнении кода вылетает ошибка
ReferenceError: User is not defined
2. Как сделать сохранение сессии? По кукам? Хочу использовать MongoDB, что в нее записывать? accessToken?
3. Просто при переходе по адресу
localhost:3000/auth/vkontakte всё работает нормально, а вот если вызвать этот адрес через axios по кнопке на фронтэнде по адресу
http://localhost:3002, то CORS не дает выполнить запрос к API вк и выдает в консоль это
Access to XMLHttpRequest at 'https://oauth.vk.com/authorize?response_type=code&...' (redirected from '127.0.0.1:3000/auth/vkontakte') from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Хотя в самом начале файла имеется
var cors = require('cors')
app.use(cors());