Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
ovi8

Email при авторизации из Вконтакте

Рекомендованные сообщения

Здравствуйте, как получить емайл от пользователя регистрирующегося через Вконтакте? На некоторых форумах я замечаю то что емайл передается автоматически (не надо в ручную набирать), понятно что они все доделывали сами.

 

Наверное этим никто не хочет делиться, своими силами у меня не получилось: если в файл conect.php добавить в scope email, то вконтакте его отдает, но форум не принимает, пробовал сделать под фэйсбук скопировал conect.php (там поля емайл есть), но видимо не все так просто...

 

Я так понимаю там нужно править два файла, connect и oauth2 или намного больше? Сколько это может стоить и кто может сделать?

Поделиться сообщением


Ссылка на сообщение

Все верно, нужно запросить email в scope и, если вк его вернет, указать его при создание пользователя.

Поделиться сообщением


Ссылка на сообщение

Если я правильно понимаю, этот код используется при создании пользователя, добавил $_userData['email'], но не было толку.

 

/* From reg, so create new account properly */
				$toSave = array( 'core' 		 => array(  'name' 				     => $safeName,
												 		    'members_display_name'   => $displayName,
												 		    'members_created_remote' => 1,
												 		    'member_group_id'		 => ( $this->settings['vk_mgid'] ) ? $this->settings['vk_mgid'] : $this->settings['member_group'],
                                                                                                                           'email'                  => $_userData['email'],
														    'vk_uid'                 => $_userData['uid'],
														    'time_offset'            => $_userData['timezone'],
														    'vk_token'               => $rToken ),
								'extendedProfile' => array( 'vk_bwoptions'    		 => $vk_bwoptions ) );

 

Где то читал, что емайл отдается с токеном, это имеет значение?

Поделиться сообщением


Ссылка на сообщение

Да, в scope нужно указать email. Если не помогло возможно вк его не вернул. При авторизации приложение спрашивает разрешение доступа к емайлу.

Поделиться сообщением


Ссылка на сообщение

Открыть \ips_kernel\vkontakte\oauth2.php

 

Найти:

 

   private $_allowed_scopes = array(

Ниже добавить:

 

       'email',        // Доступ к электронной почте.

 

Найти

 

       $session['user_id'] = isset($access_token['user_id']) ? $access_token['user_id'] : 0;

Ниже добавить:

 

       $session['email'] = isset($access_token['email']) ? $access_token['email'] : '';

 

Открыть \admin\sources\classes\vkontakte\connect.php

 

Найти

 

'scope'                     => 'wall',

Заменить на

 

'scope'                     => 'offline,email',

 

Найти

 

		/* Generate oAuth token */
		$rToken = $this->_api->getAccessToken();

Ниже добавить

 

		$session = $this->_api->getSession();

 

Найти

 

'email'                  => '',

Заменить на

 

'email'                  => isset( $session['email'] ) ? $session['email'] : '',

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Эх, к сожалению всё также: появляются поля ввода имэйл и в админке у пользователя имя и цифры вместо электронного ящика. У кого-нибудь способ предложенный siv1987 работает? Может дело во мне..

Поделиться сообщением


Ссылка на сообщение

Еще раз обратите внимание на то, что вконтакте должен вернуть емайл пользователя и для этого должно быть соответствующие разрешение с его стороны при авторизации.

Поделиться сообщением


Ссылка на сообщение

Еще раз обратите внимание на то, что вконтакте должен вернуть емайл пользователя и для этого должно быть соответствующие разрешение с его стороны при авторизации.

 

Вы имеете ввиду это разрешение? Я конечно же разрешаю, пробую зарегистрировать свою учетную запись вк.

 

post-58787-0-23068400-1456161877_thumb.png

Поделиться сообщением


Ссылка на сообщение

Если есть возможность дайте доступ на фтп, к сожелению у меня нет рабочего форума с интеграцией вконтакте чтобы проверить.

Поделиться сообщением


Ссылка на сообщение

Может здесь нужны какие-то изменения? Заметил, что в connect.php от Фейсбука поля для емайл есть

 

			/* A little gymnastics */
			$this->_userData = $_userData;
			$_userData = $this->fetchUserData( $rToken );

			/* Got a member linked already? */
			$_member = IPSMember::load( $_userData['id'], 'all', 'fb_uid' );

			/* Not connected, check email address */
			if ( ! $_member['member_id'] AND $_userData['email'] )
			{
				$_member = IPSMember::load( $_userData['email'], 'all', 'email' );

				/* We do have an existing account, so trash email forcing user to sign up with new */
				if ( $_member['member_id'] )
				{
					/* Update row */
					IPSMember::save( $_member['member_id'], array( 'core' => array( 'fb_uid' => $_userData['id'], 'fb_token' => $rToken ) ) );
				}
			}

			if ( $_member['member_id'] )
			{
				$memberData = $_member;

 

А это уже от Вконтакте

 

			/* A little gymnastics */
			$this->_userData = $_userData;
			$this->_userData['photo']=$_userData['photo_big'];

			/* Got a member linked already? */
			$_member = IPSMember::load( $_userData['uid'], 'all', 'vk_uid' );

			if ( $_member['member_id'] )
			{
				$memberData = $_member;

 

Пробовал копировать на ВК, но не было толку..

 

Если есть время взгляните пожалуйста.

 

 

Поделиться сообщением


Ссылка на сообщение

Пожалуйста, не прикрепляйте даром файлы форума и не приводите ненужные куски кода.

 

Инструкцию обновил.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Всё работает! Есть небольшие моменты: страница выдает ошибку при первой попытке, т.е. если нажать обновить или назад в браузере то все становиться нормально и сразу заходишь под своим именем, ну и второе: нельзя выбрать имя отличное от вконтакте, хотя для кого=то это и плюс :)

 

Спасибо,siv1987!

Поделиться сообщением


Ссылка на сообщение

Какую ошибку?

Имя пользователя можно удалить из кода, тогда форум предоставит возможность пользователю ввести его самому. При необхадимости можно создать настройку для управления этим поведением.

 

/admin/sources/classes/vkontakte/connect.php

 

$safeName   = IPSText::convertCharsets( $_userData['first_name'] .' '. $_userData['last_name'], 'utf-8', IPS_DOC_CHAR_SET ) ;

Заменить на

 

$safeName   = ( $this->settings['vk_realname'] ) ? IPSText::convertCharsets( $_userData['first_name'] .' '. $_userData['last_name'], 'utf-8', IPS_DOC_CHAR_SET ) : '';

 

в группе настроек "Интеграция с вконтакте" создать новую настройку vk_realname, или добавить ее в conf_global.php если нужно использовать реальное имя пользователя из вконтакте.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Круто! С этим изменением ошибка исчезла, а была: просто белый экран и всё при обновлении страницы пользователь появлялся. Ещё раз спасибо :)

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...