uLogin модуль авторизации для ДЛЕ через OpenID
Вот решил написать модуль для ДЛЕ авторизация при помощи OpenID и системы uLogin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | <?php //===================================================== // ULogin DataLife Engine 9.4 //----------------------------------------------------- // Модуль авторизации и регистрации при помощи OpenID //----------------------------------------------------- // http://seozalex.ru/ // http://ulogin.ru/ //----------------------------------------------------- // Copyright (c) 2011 seozalex.ru //===================================================== if(!defined('DATALIFEENGINE')) { die("Hacking attempt!"); } if(isset($_POST['token'])){ require_once ENGINE_DIR . '/classes/parse.class.php'; $parse = new ParseFilter( ); $parse->safe_mode = true; $parse->allow_url = false; $parse->allow_image = false; $stopregistration = FALSE; $s = file_get_contents('http://ulogin.ru/token.php?token=' . $_POST['token'] . '&host=' . $_SERVER['HTTP_HOST']); $user = json_decode($s, true); //print_r($user); //закоментировать if(isset($user['nickname'])){ $nickname = $user['nickname'];} else $nickname =""; if(isset($user['first_name'])){ $first_name = convert_unicode($user['first_name']);} else $first_name =""; if(isset($user['last_name'])){ $last_name = convert_unicode($user['last_name']);} else $last_name =""; if($nickname!=''){$name = $nickname;} elseif($first_name!=''){ $name = totranslit($first_name);} elseif($first_name!=''){$name = totranslit($last_name);} else{$name='ulogin';} if(isset($user['identity'])) { $password = md5( trim($user['identity']) );} else $password = md5( 'password') ; if(isset($user['photo'])){ $photo = $user['photo'];} else $photo =""; if(isset($user['email'])){ $email = $user['email'];} else $email = $name.'@'.clean_url($config['http_home_url']); $access_token = substr(md5($email),0,6); $array[] = $name; $bday = explode('.',$bdate); if(trim($bday[2])=="") {$bdate = "20.07.1970"; $bday = explode('.',$bdate);} $array[] = $name.substr($bday[2],2,2); $array[] = $name.$bday[2]; $array[] = $name.$bday[1].$bday[2]; $array[] = $name.$bday[0].$bday[1].$bday[2]; $array[] = $name.$access_token; //print_r($array); foreach($array as $login){ $row = $db->super_query( "SELECT COUNT(*) as count FROM " . USERPREFIX . "_users WHERE name = '$login'" ); if( $row['count'] == 0 ) {$name = $login; break;} else{ $member_id = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users where name='$login' and password='" . md5($password). "'" ); if( !empty($member_id['user_id']) ) {$name = $login; break;} } } $member_id = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users where name='$login' and password='" . md5( $password ) . "'" ); if( $member_id['user_id'] ) { //echo "Авторизовались как".$login; set_cookie( "dle_user_id", $member_id['user_id'], 365 ); set_cookie( "dle_password", $_POST['login_password'], 365 ); @session_register( 'dle_user_id' ); @session_register( 'dle_password' ); @session_register( 'member_lasttime' ); $_SESSION['dle_user_id'] = $member_id['user_id']; $_SESSION['dle_password'] = $password; $_SESSION['member_lasttime'] = $member_id['lastdate']; $_SESSION['dle_log'] = 0; $dle_login_hash = md5( strtolower( $_SERVER['HTTP_HOST'] . $member_id['name'] . sha1($password) . $config['key'] . date( "Ymd" ) ) ); if( $config['log_hash'] ) { $salt = "abchefghjkmnpqrstuvwxyz0123456789"; $hash = ''; srand( ( double ) microtime() * 1000000 ); for($i = 0; $i < 9; $i ++) { $hash .= $salt{rand( 0, 33 )}; } $hash = md5( $hash ); $db->query( "UPDATE " . USERPREFIX . "_users set hash='" . $hash . "', lastdate='{$_TIME}', logged_ip='" . $_IP . "' WHERE user_id='$member_id[user_id]'" ); set_cookie( "dle_hash", $hash, 365 ); $_COOKIE['dle_hash'] = $hash; $member_id['hash'] = $hash; } else $db->query( "UPDATE LOW_PRIORITY " . USERPREFIX . "_users set lastdate='{$_TIME}', logged_ip='" . $_IP . "' WHERE user_id='$member_id[user_id]'" ); $is_logged = TRUE; } else { $check_mail = $db->super_query( "SELECT COUNT(*) as how FROM " . USERPREFIX . "_users where email='".$email."'" ); if($check_mail['how'] > 0) $email = $login.'@'.clean_url($config['http_home_url']); require_once ENGINE_DIR . '/classes/parse.class.php'; $parse = new ParseFilter( ); $parse->safe_mode = true; $parse->allow_url = false; $parse->allow_image = false; $stopregistration = FALSE; $config['reg_group_ulogin'] = intval( $config['reg_group_ulogin'] ) ? intval( $config['reg_group_ulogin'] ) : 4; $regpassword = md5($password); $name = $db->safesql( $parse->process( htmlspecialchars( trim( $login ) ) ) ); $fullname = $db->safesql( $parse->process( $first_name.' '.$last_name ) ); $add_time = time() + ($config['date_adjust'] * 60); $_IP = $db->safesql( $_SERVER['REMOTE_ADDR'] ); if( intval( $config['reg_group'] ) < 3 ) $config['reg_group'] = 4; $db->query( "INSERT INTO " . USERPREFIX . "_users (name, fullname, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip) VALUES ('$name', '$fullname', '$regpassword', '$email', '$add_time', '$add_time', '" . $config['reg_group_ulogin'] . "', '', '', '', '', '" . $_IP . "')" ); $id = $db->insert_id()+1; if( $photo ) { $fparts = pathinfo($photo); $tmp_name = $fparts['basename']; $type = $fparts['extension']; include_once ENGINE_DIR . '/classes/thumb.class.php'; $res = @copy($photo, ROOT_DIR . "/uploads/fotos/".$tmp_name); if( $res ) { $thumb = new thumbnail( ROOT_DIR . "/uploads/fotos/".$tmp_name ); $thumb->size_auto( $user_group[$config['reg_group_ulogin']]['max_foto'] ); $thumb->jpeg_quality( $config['jpeg_quality'] ); $thumb->save( ROOT_DIR . "/uploads/fotos/foto_" . $id . "." . $type ); @unlink( ROOT_DIR . "/uploads/fotos/".$tmp_name ); $foto_name = "foto_" . $id . "." . $type; $db->query( "UPDATE " . USERPREFIX . "_users set foto='$foto_name' where name='$name'" ); } } $member_id = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users where name='$name' and password='" . md5( $password ) . "'" ); if( $member_id['user_id'] ) { // echo "Зарегистрировались как".$login; set_cookie( "dle_user_id", $member_id['user_id'], 365 ); set_cookie( "dle_password", $_POST['login_password'], 365 ); @session_register( 'dle_user_id' ); @session_register( 'dle_password' ); @session_register( 'member_lasttime' ); $_SESSION['dle_user_id'] = $member_id['user_id']; $_SESSION['dle_password'] = $password; $_SESSION['member_lasttime'] = $member_id['lastdate']; $_SESSION['dle_log'] = 0; $dle_login_hash = md5( strtolower( $_SERVER['HTTP_HOST'] . $member_id['name'] . sha1($password) . $config['key'] . date( "Ymd" ) ) ); if( $config['log_hash'] ) { $salt = "abchefghjkmnpqrstuvwxyz0123456789"; $hash = ''; srand( ( double ) microtime() * 1000000 ); for($i = 0; $i < 9; $i ++) { $hash .= $salt{rand( 0, 33 )}; } $hash = md5( $hash ); $db->query( "UPDATE " . USERPREFIX . "_users set hash='" . $hash . "', lastdate='{$_TIME}', logged_ip='" . $_IP . "' WHERE user_id='$member_id[user_id]'" ); set_cookie( "dle_hash", $hash, 365 ); $_COOKIE['dle_hash'] = $hash; $member_id['hash'] = $hash; } else $db->query( "UPDATE LOW_PRIORITY " . USERPREFIX . "_users set lastdate='{$_TIME}', logged_ip='" . $_IP . "' WHERE user_id='$member_id[user_id]'" ); $is_logged = TRUE; } } unset($_POST['token']); } ?> |
установка регистрируемся в ulogin.ru
в файл login.tpl вашего шаблона выше формы авторизации вставляем (или вместо)
1 2 3 4 5 | <div id="uLogin"></div> <script src="http://ulogin.ru/js/widget.js?display=panel&fields=first_name,last_nam e,bdate,email,nickname,photo&providers=vkontakte,m ailru,facebook,google,yandex&hidden=openid,odnokla ssniki,livejournal,twitter&redirect_uri={ulogin}"> </script> <br><br> <b>Старая авторизация на сайте:</b> <br><br> |
в файл index.php ниже
1 | $tpl->set ( '{speedbar}', $tpl->result['speedbar'] ); |
вставляем
1 | $tpl->set( '{ulogin}', urlencode('http://' . $_SERVER['HTTP_HOST'] .$_SERVER['REQUEST_URI'] )); |
в файл init.php в папке engine
ниже
1 | require_once ENGINE_DIR . '/modules/gzip.php'; |
вставляем
1 | require_once ENGINE_DIR . '/modules/ulogin.php'; |
в файл engine/inc/options.php
ниже
1 | showRow( $lang['opt_sys_reggroup'], $lang['opt_sys_reggroupd'], makeDropDown( $sys_group_arr, "save_con[reg_group]", $config['reg_group'] ) ); |
вставляем
1 | showRow( $lang['opt_sys_regulogin'], $lang['opt_sys_regulogind'], makeDropDown( $sys_group_arr, "save_con[reg_group_ulogin]", $config['reg_group_ulogin'] ) ); |
в файл language/Russian/adminpanel.lng
ниже
1 | 'wysiwyg_language' => "ru", |
вставляем
1 2 | 'opt_sys_regulogin' => "Помещать пользователей авторизующихся через ULogin в группе:", 'opt_sys_regulogind' => "Выберите группу в которую будут помещены пользователи авторизирующиеся через ULogin", |
Зайти в Админцентр — Настройки системы — Настройки пользователей
Выстаить параметр «Помещать пользователей авторизующихся через ULogin в группе:»
Предварительно можно создать спец. группу, например «ULogin»
PS. там есть такая тонкость в uLogin данные которые передаются на сайт можно поправить
widget.js?display=panel&fields=first_name,last_name,bdate,email,nickname,photo&providers=vkontakte,m ailru,facebook,google,yandex&hidden=openid,odnokla ssniki,livejournal,twitter&redirect_uri={ulogin}
чем их больше тем и логины будут более правдоподобные скажем ник и дата рождения и тд
у меня почему то аватарка не грузиться..а просто серый фон… DLE 9.3
не подскажите где проблема?)
по конкретней, а вообще надо смотреть что выдает система в переменной $user['photo']
я бы с радостью, но не силен в php…
будет времечко проверю что там и откуда приходит
исправлено см. следующий пост обновление модуля
Можете написать модуль авторизации на сайте через Steam API ?
ну наверное можно только надо разбираться что там к чему незнаю гляду может напишу у логинзы вроде есть авторизация через stream можете использовать модуль для авторизации через loginza
zalex
Loginza вымирает , при авторизации выдает не никнейм , а непонятный id , который меняется при каждом входе таким образом засоряется бд сайта.
На счет авторизации через Steam , есть мануалы самого сервеса Steam , сам бы сделал есле б мог , но увы я в этом ничего не понимаю. Документация Steam Web API http://steamcommunity.com/dev . Есле у вас получится , сделайте пожалуйста , я такой модуль искал больше года.
А как изменить выбор значков (большой-маленький) или выбрать панель connect — войти как внизу?
Шибко интернет explorer на модуль ругается, аш страничку полностью не загружает. Остальные при беглом взгляде вроде нормально, только картинки из профилей соц сетей в профиле д.л.е уж больно низкого разрешения получаются
на сайте ulogin.ru выбирайте и заменяйте то что в login.tpl, только не забудьте оставить {ulogin}
ну это вопросы не ко мне а к улогин а вообще ваши замечания СТИХИ ПРО, Stihi pro — больше похожи на спам
А можно попросить что б вы потестили на 9,5 , а то авторизация не проходит,
вибираю контакт,твиттер — авторизирует — потом кидает на заполнение доп полей и все. — дальше не перекидывает на сайт.
Спасибо.
проверил на 9.5 все также работает как и прежде проверьте скорее всего вы что-то забыли при обновлении добавить в файлы index.php, init.php, login.tpl
zalex, так всё таки уточните, можно ли на dle 9.5 ставить?
как я уже написал выше все точно также работает как и на 9.4 как впрочем и на 7.5, то есть практически от версии движка не зависит минимально пробовал 7.5 максимально 9.5 все работало покрайней мере последняя версия модуля отсюда http://seozalex.ru/2011/12/02/dorabotka-modulya-ulogin-dle/
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ‘)’ in /engine/inc/options.php on line 610
Все скопировал по инструкции, но вот такое выдало, никаких знаков вроде не пропустил…
значит что-то не так вставил скобочку забыл или еще что проверяй 610 строку options.php может скопировал не целиком