Добавить вход через Одноклассники и Вконтакте

Народ, а кто добавит Одноклассники и Вконтакте в modHybridAuth? Вот zenlab добавил Яшу, за что ему, кстати, огромное спасибо!

Публикую скрипт <?php class Hybrid_Providers_vk extends Hybrid_Provider_Model_OAuth2 {

function initialize() {
    parent::initialize();
    $this->api->authorize_url   = "http://oauth.vk.com/authorize";
    $this->api->token_url       = "https://oauth.vk.com/access_token"; 
    $this->api->sign_token_name = "code";

if( $this->token( "access_token" ) ){ $this->api->access_token = $this->token( "access_token" ); $this->api->refresh_token = $this->token( "refresh_token" ); $this->api->access_token_expires_in = $this->token( "expires_in" ); $this->api->access_token_expires_at = $this->token( "expires_at" ); $this->api->token_user_id = $this->token( "user_id" ); $this->api->email = $this->token( "email" ); }

}


function getUserProfile() {

if ( $this->api->access_token ) {

    $params = array(
        'uids'         => $this->api->token_user_id,
        'fields'       => 'uid,first_name,last_name,screen_name,sex,bdate,photo_big',
        'access_token' => $this->api->access_token
    );


    $userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true);
    if (isset($userInfo['response'][0]['uid'])) {
        $userInfo = $userInfo['response'][0];
        $result = true;
    }
}

if ($result) { $this->user->profile->identifier = $userInfo['uid']; $this->user->profile->firstName = $userInfo['first_name']; $this->user->profile->displayName = $userInfo['screen_name']; $this->user->profile->photoURL = $userInfo['photo_big']; $this->user->profile->gender = $userInfo['sex']; $this->user->profile->email = $this->api->email; $this->user->profile->emailVerified = $this->api->email; return $this->user->profile;

}


else {
     
      throw new Exception( "User profile request failed! {$this->providerId} returned an invalide response.", 6 );
    }

} } Такой вопрос только остался открытым все работает, но не получается подтянуть к профилю email. Так и не понял почему $this->user->profile->email. В первичном запросе к vk api указал параметр scope=email как указано в букваре api. Теперь поидее он должен подтянуться в массиве токена $this->token( «email» ); Но почему то не работает. Может у кого-то есть идеи как исправить

Не буду утверждать наверняка, но некоторые соцсети сейчас в принципе не отдают емейлы, типа по политикам безопасности. Может и ВК перестал отдавать. Чуть позже Лев Вербицкий посмотрит, он у нас специалист по соцсетям.

Николай, Вк как раз сейчас стал отдавать, я тестово запускал скрипт без привязки к modHybridAuth. Прекрасно подтянулся он в массив токена. Здесь причина глубже. Буду рад если кто-то сможет помочь. Допилим до конца — вещь полезная)

Думаю допилим. Просто уже после праздников.

Не страшно как бы ) Все не к спеху

Нашел еще более обширное решение github.com — немного подправил классы и email цепляет и в принципе больше ничего не надо ), но с остальными данными — упорно не грузит их. Пол, дату рождения, фото профиля и тд