chuikoffru
@chuikoffru
Full Stack JS Developer

Как получить email через API ВКонтакте PassportJS?

Здравствуйте! Пытаюсь получить E-mail пользователя через авторизацию Вконтакте, с помощью passport-vkontake, но этот модуль не предусматривает получение емайл, точнее scope=email, мы послать можем, но у ВК емайл приходит вместе с токеном (то есть при первом запросе), а не при запросе получения данных пользователя. Я пытался выудить где хранится ответ на получение токена в коде модуля, но увы уже 2 часа ночи, и я больше не знаю куда копать. Я уже дошел до файла node_modules ▸ passport-vkontakte ▸ node_modules ▸ passport-oauth2 ▸ node_modules ▸ oauth ▸ lib /oauth2.js, и понимаю что где-то тут ответ:

this._request("POST", this._getAccessTokenUrl(), post_headers, post_data, null, function(error, data, response) {
    if( error )  callback(error);
    else {
      var results;
      try {
        // As of http://tools.ietf.org/html/draft-ietf-oauth-v2-07
        // responses should be in JSON
        results= JSON.parse( data );
      }
      catch(e) {
        // .... However both Facebook + Github currently use rev05 of the spec
        // and neither seem to specify a content-type correctly in their response headers :(
        // clients of these services will suffer a *minor* performance cost of the exception
        // being thrown
        results= querystring.parse( data );
      }
      var access_token= results["access_token"];
      var refresh_token= results["refresh_token"];
      delete results["refresh_token"];
      callback(null, access_token, refresh_token, results); // callback results =-=
    }
  });
}


Я так понимаю что тут хранится ответ var access_token= results["access_token"]; нужно только убрать ["access_token"]. Но не факт.

Но как его вытащить не знаю. У себя пока так все выглядит:

passport.use('vk', new vk({
    clientID: config.get('auth:vk:app_id'),
    clientSecret: config.get('auth:vk:secret'),
    callbackURL: config.get('app:url') + "/auth/vk/callback",
},function (accessToken, refreshToken, profile, done) {
    console.log(accessToken);
}));


Нужна очень ваша компетентная помощь. Заранее благодарен.
  • Вопрос задан
  • 877 просмотров
Решения вопроса 1
chuikoffru
@chuikoffru Автор вопроса
Full Stack JS Developer
Все задача решена!!! Юхухууу!!!

passport.use('vk', new vk({
    clientID: config.get('auth:vk:app_id'),
    clientSecret: config.get('auth:vk:secret'),
    callbackURL: config.get('app:url') + "/auth/vk/callback",
    apiVersion : "5.32"
},function (accessToken, refreshToken, params, profile, done) {
    console.log(params);
}));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы