uLogin

Опубликовано: 21 Июл 2015

Взято отсюда.

Часто проскакивает тема авторизации через соцсети с помощью uLogin, но как нужно, то невозможно ничего найти. Поэтому вот небольшой сниппет, который нужно вставить на страницу и указать в нем несколько параметров.
Дополнительно требует установленного сниппета weblogin.

<?php
$salt = '11111salt'; //для пароля - поменять!
$account_id = '20';//id ресурса "кабинет" для авторизованного  - поменять!
$fields = 'first_name,last_name,email'; //обязательные поля
$providers = 'vkontakte,odnoklassniki,mailru,facebook'; //список видимых провайдеров
$userId = $modx->getLoginUserId("web");
if ($userId) {//если пользователь авторизован, отправляем его сразу в кабинет
    $modx->sendRedirect($modx->makeUrl($account_id));
}
$out = '';
$out .= '
<script src="http://ulogin.ru/js/ulogin.js"></script>
<div id="uLogin" data-ulogin="display=panel;fields=' . $fields . ';providers='. $providers .';hidden=other;redirect_uri=' . $modx->config['site_url'] . ltrim($_SERVER['REQUEST_URI'], '/') . '"></div>
';
if (isset($_POST['token'])) {
    $s = file_get_contents('http://ulogin.ru/token.php?token=' . $_POST['token'] . '&host=' . $_SERVER['HTTP_HOST']);
    $user = json_decode($s, true);
    if (isset($user['error'])) {
        $out .= 'Произошла ошибка. Попробуйте еще раз';
    } else {
        if (!empty($user)) {
            $uid = isset($user['uid']) ? $user['uid'] : '';
            $provider = isset($user['network']) ? $user['network'] : '';
            $firstname = isset($user['first_name']) ? $user['first_name'] : '';
            $lastname = isset($user['last_name']) ? $user['last_name'] : '';
            $fullname = $lastname . ' ' . $firstname;
            $identity = isset($user['identity']) ? $user['identity'] : '';
            $password = md5($uid . $provider . $salt);
    
            if($uid != '' && $provider != ''){
                $username = $uid . '@' . $provider;
                $email = isset($user['email']) ? $user['email'] : $uid . '_' . $provider . '@test.ru';
                $fax = isset($user['profile']) ? $user['profile'] : ''; //внесем в это поле ссылку на профиль в соцсети
                if (!$userId && $fax != '') {//если пользователь не авторизован
                    //ищем, есть ли такой пользователь среди зарегистрированных
                    $q = $modx->db->query("SELECT id FROM " . $modx->getFullTableName('web_users') . " WHERE `username` = '" . $username . "' AND `password` = '" . $password . "' LIMIT 0, 1");
                    if($modx->db->getRecordCount($q) == 0){//если пользователь еще не зарегистрирован
                        $ins = $modx->db->insert(array('username'=>$username, 'password'=>$password), $modx->getFullTableName('web_users'));
                        if ($ins) {
                            $ins2 = $modx->db->insert(array('fullname'=>$fullname, 'email'=>$email, 'fax'=>$fax, 'comment'=>$identity, 'internalKey'=>$modx->db->getInsertId()), $modx->getFullTableName('web_user_attributes'));
                        }
                    }
                    //теперь осталось его только авторизовать
                    $_POST['username'] = $username;
                    $_POST['password'] = $uid . $provider . $salt;
                    $_POST['cmdweblogin']='Login';
                    $ok = $modx->runSnippet('WebLogin');
                    echo $ok;
                }
            }
        }
    }
}
return $out;
?>

Комментарии (0)


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: