Информация Плагин - Авторизация через социальные сети : HybridAuth

novotex

Гуру форума
Регистрация
11 Фев 2017
Сообщения
314
Реакции
82
Я прочитал Ваш ответ, потом подпись "Сайты 9 лет держу.." и мрачно охерел

Как вы не поймёте, что для всех сайтов никогда вам не дадут ни из какой соцсети полных контактов пока ваш сайт не станет значимым.
У твоего сайта есть доверие? Ну с чего им давать контакты спамерам?

  • модерация не сложная, но может затянуться на месяц-2
Куда уж проще ответить может эту хрень плагин или нет, а не нести чушь, от которой глаза кровоточат?
Не умеет - пройду мимо, возьму сдк фб из коробки. Я так понимаю, ответ никто мне тут не даст, раскопаю сам.

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

avtosibiri

Создатель
Регистрация
1 Окт 2014
Сообщения
40
Реакции
9
Запрос Профиля пользователя не удался. Скорее всего, пользователь не подключен к провайдеру и он должен аутентифицироваться снова. перестал работать вход через вконтакт. Всем привет! Кто знает как исправить эту ошибку, подскажите как исправить
 

avtosibiri

Создатель
Регистрация
1 Окт 2014
Сообщения
40
Реакции
9
Всем привет! кто реализовал вход через Telegram? или кто может это сделать?
 

_kot

BEng
Команда форума
Модератор
Регистрация
16 Ноя 2018
Сообщения
196
Реакции
236
VK у всех работает? У меня не работает. работает только если под логином разработчика заходишь на сайт. другие не работают

API поменялся, пока замени ../plugins/HybridAuth/hybridauth-2.10.0/hybridauth/Hybrid/ProvidersVKontakte.php на это

Код:
<?php
/*!
* HybridAuth
* http://hybridauth.sourceforge.net | https://github.com/hybridauth/hybridauth
*  (c) 2009-2015 HybridAuth authors | hybridauth.sourceforge.net/licenses.html
*/

/**
* Hybrid_Providers_Vkontakte provider adapter based on OAuth2 protocol
*
* added by guiltar | https://github.com/guiltar
*
* @property OAuth2Client $api
*/
class Hybrid_Providers_Vkontakte extends Hybrid_Provider_Model_OAuth2 {
    // default permissions
    public $scope = "email";

    // default user fields map
    public $fields = array(
        // Old that saved for backward-compability
      'identifier' => 'uid',
      'firstName' => 'first_name',
      'lastName' => 'last_name',
      'displayName' => 'screen_name',
      'gender' => 'sex',
      'photoURL' => 'photo_big',
      'home_town' => 'home_town',
      'profileURL' => 'domain',      // Will be converted in getUserByResponse()
        // New
      'nickname' => 'nickname',
      'bdate' => 'bdate',
      'timezone' => 'timezone',
      'photo_rec' => 'photo_rec',
      'domain' => 'domain',
      'photo_max' => 'photo_max',
      // fix 2019
      //'home_phone' => 'home_phone',
      'city' => 'city',        // Will be converted in getUserByResponse()
      'country' => 'country',     // Will be converted in getUserByResponse()
    );

    /**
     * IDp wrappers initializer
     */
    function initialize() {
        parent::initialize();

        // Provider api end-points
        $this->api->api_base_url = 'https://api.vk.com/method/';
        $this->api->authorize_url = "https://oauth.vk.com/authorize";
        $this->api->token_url = "https://oauth.vk.com/token";
        if (!empty($this->config['fields'])) {
            $this->fields = $this->config['fields'];
        }
    }

    function loginFinish() {
        $error = isset($_REQUEST['error']) ? $_REQUEST['error'] : "";

        // check for errors
        if ($error) {
            throw new Exception("Authentication failed! {$this->providerId} returned an error: $error", 5);
        }

        // try to authenticate user
        $code = isset($_REQUEST['code']) ? $_REQUEST['code'] : "";

        try {
            $response = $this->api->authenticate($code);
        } catch (Exception $e) {
            throw new Exception("User profile request failed! {$this->providerId} returned an error: $e", 6);
        }

        // check if authenticated
        if (empty($response->user_id) || !$this->api->access_token) {
            throw new Exception("Authentication failed! {$this->providerId} returned an invalid access token.", 5);
        }

        // store tokens
        $this->token("access_token", $this->api->access_token);
        $this->token("refresh_token", $this->api->refresh_token);
        $this->token("expires_in", $this->api->access_token_expires_in);
        $this->token("expires_at", $this->api->access_token_expires_at);

        // store user id. it is required for api access to Vkontakte
        Hybrid_Auth::storage()->set("hauth_session.{$this->providerId}.user_id", $response->user_id);
        Hybrid_Auth::storage()
          ->set("hauth_session.{$this->providerId}.user_email", !empty($response->email) ? $response->email : null);

        // set user connected locally
        $this->setUserConnected();
    }

    /**
     * load the user profile from the IDp api client
     */
    function getUserProfile() {

        // refresh tokens if needed
        $this->refreshToken();

        // Vkontakte requires user id, not just token for api access
         // fix 2019
        //$params['uid'] = Hybrid_Auth::storage()->get("hauth_session.{$this->providerId}.user_id");
        $params['id'] = Hybrid_Auth::storage()->get("hauth_session.{$this->providerId}.user_id");
        $params['fields'] = implode(',', $this->fields);

        //mod sz ver 1.0.4 add missed params json
        $params['v'] = '5.95';

        // ask vkontakte api for user infos
        // mod sz new VK method
        $response = $this->api->api( 'users.get' , 'GET', $params);

        //old code
        //$response = $this->api->api('getProfiles', 'GET', $params);

        // fix 2019
        //if (!isset($response->response[0]) || !isset($response->response[0]->uid) || isset($response->error)) {
                if (!isset($response->response[0]) || !isset($response->response[0]->id) || isset($response->error)) {
      
        throw new Exception("User profile request failed! {$this->providerId} returned an invalid response.", 6);
        }

        // Fill datas
        $response = reset($response->response);
        foreach ($this->getUserByResponse($response, true) as $k => $v) {
            $this->user->profile->$k = $v;
        }

        // Additional data
        $this->user->profile->email = Hybrid_Auth::storage()->get("hauth_session.{$this->providerId}.user_email");
        return $this->user->profile;
    }

    /**
     * load the user contacts
     */
    function getUserContacts() {
        $params = array(
          'fields' => implode(',', $this->fields),
        );

        $response = $this->api->api('friends.get', 'GET', $params);

        if (empty($response) || empty($response->response)) {
            return array();
        }

        $contacts = array();
        foreach ($response->response as $item) {
            $contacts[] = $this->getUserByResponse($item);
        }

        return $contacts;
    }

    /**
     * @param object $response
     * @param bool $withAdditionalRequests True to get some full fields like 'city' or 'country'
     *                                       (requires additional responses to vk api!)
     *
     * @return \Hybrid_User_Contact
     */
    function getUserByResponse($response, $withAdditionalRequests = false) {
        $user = new Hybrid_User_Contact();

        foreach ($this->fields as $field => $map) {
            $user->$field = isset($response->$map) ? $response->$map : null;
        }

        if (!empty($user->profileURL)) {
            $user->profileURL = 'http://vk.com/' . $user->profileURL;
        }

        if (isset($user->gender)) {
            switch ($user->gender) {
                case 1:
                    $user->gender = 'female';
                    break;

                case 2:
                    $user->gender = 'male';
                    break;

                default:
                    $user->gender = null;
                    break;
            }
        }

        if (!empty($user->bdate)) {
            $birthday = explode('.', $user->bdate);
            switch (count($birthday)) {
                case 3:
                    $user->birthDay = (int)$birthday[0];
                    $user->birthMonth = (int)$birthday[1];
                    $user->birthYear = (int)$birthday[2];
                    break;

                case 2:
                    $user->birthDay = (int)$birthday[0];
                    $user->birthMonth = (int)$birthday[1];
                    break;
            }
        }

        if (!empty($user->city) && $withAdditionalRequests) {
            $params = array('city_ids' => $user->city);
            $cities = (array) $this->api->api('database.getCitiesById', 'GET', $params);
            $city = reset($cities);
          
            if (is_array($city)) {
                $city = reset($city);
            }

            if (is_object($city) || is_string($city)) {
                $user->city = isset($city->name) ? $city->name : null;
            }
        }

        if (!empty($user->country) && $withAdditionalRequests) {
            $params = array('country_ids' => $user->country);
            $countries = (array) $this->api->api('database.getCountriesById', 'GET', $params);
            $country = reset($countries);

            if (is_array($country)) {
                $country = reset($country);
            }

            if (is_object($country) || is_string($country)) {
                $user->country = isset($country->name) ? $country->name : null;
            }
        }

        return $user;
    }
}

Позже плагин обновлю.
 

avtosibiri

Создатель
Регистрация
1 Окт 2014
Сообщения
40
Реакции
9
подскажите, после авторизации как сделать чтобы сразу в личный кабинет переходил?
 

_kot

BEng
Команда форума
Модератор
Регистрация
16 Ноя 2018
Сообщения
196
Реакции
236
подскажите, после авторизации как сделать чтобы сразу в личный кабинет переходил?
../plugins/HybridAuth/HybridAuthClass.php
строка 120
Поменяй
Код:
osc_redirect_to(osc_base_url());
на
Код:
osc_redirect_to(osc_user_dashboard_url());
 

_kot

BEng
Команда форума
Модератор
Регистрация
16 Ноя 2018
Сообщения
196
Реакции
236
Инстаграмм нужен, а не телеграмм.:sun:
Код:
Mod 1.1.6 :
# Загрузка аватарки с соц.сетей (для этого нужно установить дополнительно плагин - Profile Picture )
# Новый ВК api 2019 - вылечено
# Подключен Instagram
# Опция перехода на главную страницу после авторизации или на страницу пользователя
После копирования файлов - нужно сделать uninstall -> install (не забудьте скопировать ключи подключенных провайдеров, они пропадут)

Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:

grant24

Создатель
Регистрация
11 Сен 2018
Сообщения
8
Реакции
2
Код:
Mod 1.1.6 :
# Загрузка аватарки с соц.сетей (для этого нужно установить дополнительно плагин - Profile Picture )
# Новый ВК api 2019 - вылечено
# Подключен Instagram
# Опция перехода на главную страницу после авторизации или на страницу пользователя
После копирования файлов - нужно сделать uninstall -> install (не забудьте скопировать ключи подключенных провайдеров, они пропадут)

Для просмотра ссылки Войди или Зарегистрируйся
После авторизации перекидывает на белую страницу.

Как бороться с предупреждением гугла, приложение не проверено?

Зачем такие разрешения?

Ошибка последней версии такая
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    49,6 KB · Просмотры: 51
  • Снимок.PNG
    Снимок.PNG
    6,4 KB · Просмотры: 48
Последнее редактирование модератором:

grant24

Создатель
Регистрация
11 Сен 2018
Сообщения
8
Реакции
2
Зачем такие разрешения?
ты что в школе не учился!?

остальное все работает.
И всё таки, как избавится от "приложение не проверено"?
Какие магические функции нужно сделать.
 
Последнее редактирование:

Vadimkrd

Писатель
Регистрация
29 Май 2013
Сообщения
1
Реакции
0
Ребята помогите пожалуйста !!!
У меня tamara do 2.3, подскажите пожалуйста детально, как для идиотов что мне по шагам нужно сделать, что бы у меня заработала авторизация через ВК ?!?

Я не программист и php не знаю, так что не судите строго )!
 
Сверху