Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
ovi8

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

Recommended Posts

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Если я правильно понимаю, этот код используется при создании пользователя, добавил $_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 ) );

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Открыть \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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Может здесь нужны какие-то изменения? Заметил, что в 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;

 

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

 

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

 

 

Share this post


Link to post
Share on other sites

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

 

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

Спасибо,siv1987!

Share this post


Link to post
Share on other sites

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

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

 

/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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...