Email при авторизации из Вконтакте - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

vkontakte

Страница 1 из 1

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

#1 Пользователь не на сайте   ovi8 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 24-Декабрь 15
  • Репутация: 1
  • IPB version:3.4.x
 

Отправлено 30 Январь 2016 - 09:52

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

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

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

#2 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 253
  • Регистрация: 20-Март 09
  • Репутация: 2 065
  • IPB version:3.1.x
 

Отправлено 30 Январь 2016 - 10:53

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

#3 Пользователь не на сайте   ovi8 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 24-Декабрь 15
  • Репутация: 1
  • IPB version:3.4.x
 

Отправлено 30 Январь 2016 - 12:05

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


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

#4 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 253
  • Регистрация: 20-Март 09
  • Репутация: 2 065
  • IPB version:3.1.x
 

Отправлено 30 Январь 2016 - 13:17

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

#5 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 253
  • Регистрация: 20-Март 09
  • Репутация: 2 065
  • IPB version:3.1.x
 

Отправлено 01 Февраль 2016 - 15:55

Открыть \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'] : '',

1

#6 Пользователь не на сайте   ovi8 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 24-Декабрь 15
  • Репутация: 1
  • IPB version:3.4.x
 

Отправлено 22 Февраль 2016 - 18:58

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

#7 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 253
  • Регистрация: 20-Март 09
  • Репутация: 2 065
  • IPB version:3.1.x
 

Отправлено 22 Февраль 2016 - 20:01

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

#8 Пользователь не на сайте   ovi8 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 24-Декабрь 15
  • Репутация: 1
  • IPB version:3.4.x
 

Отправлено 22 Февраль 2016 - 20:24

Просмотреть сообщениеsiv1987 22 Февраль 2016 - 20:01 сказал(а):

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


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

Вложение  тест.png (21,88К)
Количество загрузок: 17
0

#9 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 253
  • Регистрация: 20-Март 09
  • Репутация: 2 065
  • IPB version:3.1.x
 

Отправлено 22 Февраль 2016 - 21:44

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

#10 Пользователь не на сайте   ovi8 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 24-Декабрь 15
  • Репутация: 1
  • IPB version:3.4.x
 

Отправлено 11 Март 2016 - 22:07

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


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

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


0

#11 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 253
  • Регистрация: 20-Март 09
  • Репутация: 2 065
  • IPB version:3.1.x
 

Отправлено 11 Март 2016 - 22:36

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

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

#12 Пользователь не на сайте   ovi8 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 24-Декабрь 15
  • Репутация: 1
  • IPB version:3.4.x
 

Отправлено 23 Март 2016 - 07:54

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

Спасибо,siv1987!
0

#13 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 253
  • Регистрация: 20-Март 09
  • Репутация: 2 065
  • IPB version:3.1.x
 

Отправлено 26 Март 2016 - 21:27

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

/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 если нужно использовать реальное имя пользователя из вконтакте.
1

#14 Пользователь не на сайте   ovi8 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 52
  • Регистрация: 24-Декабрь 15
  • Репутация: 1
  • IPB version:3.4.x
 

Отправлено 27 Март 2016 - 19:35

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

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна