Ответить
забыл, дописал
Добавлено2012.11.10 20-41
Сегодня обнаружился страшный баг. Человек может зайти через одноклассники и тогда его ник будет представлять собой Imya.Familiya но это не поддерживается системой. Не знаю, что они не могут, но вот личку ему я не смог написать. Нужно доработать скрипт, чтобы не торопил регистрировать, а предлогал сменить ник
хозяева - яндекс, так что понятно, что с безопасностью всё нормально.
закопать.
Добавлено2013.01.17 14-58
пусть будет не в движке, а плагином
собственно я её и имел ввиду просто думал что это одно и тоже
видимо нужно пользователям разрешить менять имя
как бы это сделать чтоб можно было сменить только раз
Интересно посмотреть на него. Ему уже почти год оО.
1
Прикручиваем loginza к сайту
Отправлено: 26 Июн 2012#1
пока по-быстрому оформлю, потом подробнее распишу. хотя и сам скрипт тоже по-быстрому писал)
прошу извинить, но сделал без всяких меток и выноса шаблона в отдельный файл, очень лень
и так, откройте форму входа (/template/шаблон/html/users/loginform.html) и добавьте в нужное место следующий код:
<script src="/js/widget.js" type="text/javascript"></script>
<iframe src="http://loginza.ru/api/widget?overlay=loginza&token_url=http://АДРЕС_САЙТА/users/loginza"
style="width:359px;height:300px;" scrolling="no" frameborder="no"></iframe>
он выводит айфрейм с шириной 359px и вышиной 300px где список сервисов. можно некоторые сервисы добавлять/убирать, читайтедоку
потом открываем /modules/users/index.php
перед
добавляем
и кидаем файлы из прекреплённого архива положить в sys/inc/libs/
прошу извинить, но сделал без всяких меток и выноса шаблона в отдельный файл, очень лень
и так, откройте форму входа (/template/шаблон/html/users/loginform.html) и добавьте в нужное место следующий код:
<script src="/js/widget.js" type="text/javascript"></script>
<iframe src="http://loginza.ru/api/widget?overlay=loginza&token_url=http://АДРЕС_САЙТА/users/loginza"
style="width:359px;height:300px;" scrolling="no" frameborder="no"></iframe>
он выводит айфрейм с шириной 359px и вышиной 300px где список сервисов. можно некоторые сервисы добавлять/убирать, читайте
потом открываем /modules/users/index.php
перед
Code:
}
?>
?>
добавляем
Code:
public function loginza() {
// объект работы с Loginza API
require_once(R . 'sys/inc/libs/LoginzaAPI.class.php');
require_once(R . 'sys/inc/libs/LoginzaUserProfile.class.php');
$LoginzaAPI = new LoginzaAPI();
if (!empty($_POST['token'])) {
// получаем профиль авторизованного пользователя
$UserProfile = $LoginzaAPI->getAuthInfo($_POST['token']);
// проверка на ошибки
if (!empty($UserProfile->error_type)) {
// есть ошибки, выводим их
// в рабочем примере данные ошибки не следует выводить пользователю, так как они несут информационный характер только для разработчика
echo $UserProfile->error_type.": ".$UserProfile->error_message;
} elseif (empty($UserProfile)) {
// прочие ошибки
echo 'Temporary error.';
} else {
// ошибок нет запоминаем пользователя как авторизованного
$_SESSION['loginza']['is_auth'] = 1;
// запоминаем профиль пользователя в сессию или создаем локальную учетную запись пользователя в БД
$_SESSION['loginza']['profile'] = $UserProfile;
$LoginzaProfile = new LoginzaUserProfile($_SESSION['loginza']['profile']);
$name = $LoginzaProfile->genNickname();
$password = $name+rand();
if ($LoginzaProfile->genDob()) {
$data = explode("-", $LoginzaProfile->genDob());
$byear = $data[0];
$bmonth = $data[1];
$bday = $data[2];
} else {
$byear = '0000';
$bmonth = '00';
$bday = '00';
}
// kirilic
$rus = array( "А","а","В","Е","е","К","М","Н","О","о","Р","р","С","с","Т","Х","х" );
// latin
$eng = array( "A","a","B","E","e","K","M","H","O","o","P","p","C","c","T","X","x" );
$new_name = preg_replace( "#[^- _0-9a-zА-Яа-я]#i", "", $name );
// Заменяем русские буквы латинскими
$eng_new_name = str_replace( $rus, $eng, $new_name );
// Заменяем латинские буквы русскими
$rus_new_name = str_replace( $eng, $rus, $new_name );
// Формируем SQL-запрос
$res = $this->DB->query("SELECT * FROM `" . $this->DB->getFullTableName('users') . "`
WHERE name LIKE '".mysql_real_escape_string( $new_name )."' OR
name LIKE '".mysql_real_escape_string( $eng_new_name )."' OR
name LIKE '".mysql_real_escape_string( $rus_new_name )."';");
if (count($res) > 0) {
$res = $this->DB->query("SELECT *, UNIX_TIMESTAMP(last_visit) as unix_last_visit
FROM `" . $this->DB->getFullTableName('users') . "` WHERE name='"
.mysql_real_escape_string( $name )."' AND provider='".$LoginzaProfile->genProvider()."' LIMIT 1");
if (count($res) == 0) {
echo 'смените ник';
} else {
$res2 = $this->DB->select('users', DB_FIRST, array('cond' => array('name' => $name)));
$user = $res2[0];
$_SESSION['user']['name'] = $name;
$_SESSION['user']['id'] = $user['id'];
$_SESSION['user']['status'] = $user['status'];
$_SESSION['user']['passw'] = $user['passw'];
$path = '/';
setcookie( 'autologin', 'yes', time() + 3600 * 24 * Config::read('cookie_time'), $path );
setcookie( 'userid', $_SESSION['user']['id'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
setcookie( 'password', $_SESSION['user']['passw'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
}
} else {
// Все поля заполнены правильно - продолжаем регистрацию
$res = $this->DB->save('users', array(
'name' => $name,
'passw' => md5( $password ),
'email' => '',
'timezone' => '0',
'byear' => $byear,
'bmonth' => $bmonth,
'bday' => $bday,
'about' => '',
'signature' => '',
'photo' => '',
'puttime' => new Expr('NOW()'),
'last_visit' => new Expr('NOW()'),
'themes' => 0,
'status' => 1,
'activation' => 1,
'provider' => $LoginzaProfile->genProvider()
));
$id = mysql_insert_id();
$_SESSION['user']['name'] = $name;
$_SESSION['user']['id'] = $id;
$_SESSION['user']['status'] = '1';
$_SESSION['user']['passw'] = md5( $password );
echo 'Поздравляем с регистрацией, '.$name.'!<br>ваш пароль '.$password.' запишите его куда-нибудь, он потребуется если вы захотите войти на сайт напрямую, без авторизации на '.$LoginzaProfile->genProvider().' или при смене E-Mail<br><a href="/">Перейти на сайт</a><br><br><br><br><br><br>';
$path = '/';
setcookie( 'autologin', 'yes', time() + 3600 * 24 * Config::read('cookie_time'), $path );
setcookie( 'userid', $_SESSION['user']['id'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
setcookie( 'password', $_SESSION['user']['passw'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
}
}
} elseif (isset($_GET['quit'])) {
// выход пользователя
unset($_SESSION['loginza']);
}
// проверка авторизации, вывод профиля если пользователь авторизован ранее
if (!empty($_SESSION['loginza']['is_auth'])) {
// выводим переданные данные от Loginza API
$LoginzaAPI->debugPrint($_SESSION['loginza']['profile']);
} else {
// требуетс авторизация, вывод ссылки на Loginza виджет
echo "<h3>Блок авторизации:</h3>";
echo '<a href="'.$LoginzaAPI->getWidgetUrl().'" class="loginza">Для авторизации нажмите ссылку</a>';
}
}
// объект работы с Loginza API
require_once(R . 'sys/inc/libs/LoginzaAPI.class.php');
require_once(R . 'sys/inc/libs/LoginzaUserProfile.class.php');
$LoginzaAPI = new LoginzaAPI();
if (!empty($_POST['token'])) {
// получаем профиль авторизованного пользователя
$UserProfile = $LoginzaAPI->getAuthInfo($_POST['token']);
// проверка на ошибки
if (!empty($UserProfile->error_type)) {
// есть ошибки, выводим их
// в рабочем примере данные ошибки не следует выводить пользователю, так как они несут информационный характер только для разработчика
echo $UserProfile->error_type.": ".$UserProfile->error_message;
} elseif (empty($UserProfile)) {
// прочие ошибки
echo 'Temporary error.';
} else {
// ошибок нет запоминаем пользователя как авторизованного
$_SESSION['loginza']['is_auth'] = 1;
// запоминаем профиль пользователя в сессию или создаем локальную учетную запись пользователя в БД
$_SESSION['loginza']['profile'] = $UserProfile;
$LoginzaProfile = new LoginzaUserProfile($_SESSION['loginza']['profile']);
$name = $LoginzaProfile->genNickname();
$password = $name+rand();
if ($LoginzaProfile->genDob()) {
$data = explode("-", $LoginzaProfile->genDob());
$byear = $data[0];
$bmonth = $data[1];
$bday = $data[2];
} else {
$byear = '0000';
$bmonth = '00';
$bday = '00';
}
// kirilic
$rus = array( "А","а","В","Е","е","К","М","Н","О","о","Р","р","С","с","Т","Х","х" );
// latin
$eng = array( "A","a","B","E","e","K","M","H","O","o","P","p","C","c","T","X","x" );
$new_name = preg_replace( "#[^- _0-9a-zА-Яа-я]#i", "", $name );
// Заменяем русские буквы латинскими
$eng_new_name = str_replace( $rus, $eng, $new_name );
// Заменяем латинские буквы русскими
$rus_new_name = str_replace( $eng, $rus, $new_name );
// Формируем SQL-запрос
$res = $this->DB->query("SELECT * FROM `" . $this->DB->getFullTableName('users') . "`
WHERE name LIKE '".mysql_real_escape_string( $new_name )."' OR
name LIKE '".mysql_real_escape_string( $eng_new_name )."' OR
name LIKE '".mysql_real_escape_string( $rus_new_name )."';");
if (count($res) > 0) {
$res = $this->DB->query("SELECT *, UNIX_TIMESTAMP(last_visit) as unix_last_visit
FROM `" . $this->DB->getFullTableName('users') . "` WHERE name='"
.mysql_real_escape_string( $name )."' AND provider='".$LoginzaProfile->genProvider()."' LIMIT 1");
if (count($res) == 0) {
echo 'смените ник';
} else {
$res2 = $this->DB->select('users', DB_FIRST, array('cond' => array('name' => $name)));
$user = $res2[0];
$_SESSION['user']['name'] = $name;
$_SESSION['user']['id'] = $user['id'];
$_SESSION['user']['status'] = $user['status'];
$_SESSION['user']['passw'] = $user['passw'];
$path = '/';
setcookie( 'autologin', 'yes', time() + 3600 * 24 * Config::read('cookie_time'), $path );
setcookie( 'userid', $_SESSION['user']['id'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
setcookie( 'password', $_SESSION['user']['passw'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
}
} else {
// Все поля заполнены правильно - продолжаем регистрацию
$res = $this->DB->save('users', array(
'name' => $name,
'passw' => md5( $password ),
'email' => '',
'timezone' => '0',
'byear' => $byear,
'bmonth' => $bmonth,
'bday' => $bday,
'about' => '',
'signature' => '',
'photo' => '',
'puttime' => new Expr('NOW()'),
'last_visit' => new Expr('NOW()'),
'themes' => 0,
'status' => 1,
'activation' => 1,
'provider' => $LoginzaProfile->genProvider()
));
$id = mysql_insert_id();
$_SESSION['user']['name'] = $name;
$_SESSION['user']['id'] = $id;
$_SESSION['user']['status'] = '1';
$_SESSION['user']['passw'] = md5( $password );
echo 'Поздравляем с регистрацией, '.$name.'!<br>ваш пароль '.$password.' запишите его куда-нибудь, он потребуется если вы захотите войти на сайт напрямую, без авторизации на '.$LoginzaProfile->genProvider().' или при смене E-Mail<br><a href="/">Перейти на сайт</a><br><br><br><br><br><br>';
$path = '/';
setcookie( 'autologin', 'yes', time() + 3600 * 24 * Config::read('cookie_time'), $path );
setcookie( 'userid', $_SESSION['user']['id'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
setcookie( 'password', $_SESSION['user']['passw'], time() + 3600 * 24 * Config::read('cookie_time'), $path );
}
}
} elseif (isset($_GET['quit'])) {
// выход пользователя
unset($_SESSION['loginza']);
}
// проверка авторизации, вывод профиля если пользователь авторизован ранее
if (!empty($_SESSION['loginza']['is_auth'])) {
// выводим переданные данные от Loginza API
$LoginzaAPI->debugPrint($_SESSION['loginza']['profile']);
} else {
// требуетс авторизация, вывод ссылки на Loginza виджет
echo "<h3>Блок авторизации:</h3>";
echo '<a href="'.$LoginzaAPI->getWidgetUrl().'" class="loginza">Для авторизации нажмите ссылку</a>';
}
}
и кидаем файлы из прекреплённого архива положить в sys/inc/libs/
Отредактировано автором 26 Июн 2012
Отправлено: 26 Июн 2012#2
Спасибо прикрутил. ( И это допиши что файлы с Архива в sys/inc/libs/ кидать или путь сменить)
Отредактировано автором 26 Июн 2012
Отправлено: 10 Ноя 2012#3
Losting пишет:
И это допиши что файлы с Архива в sys/inc/libs/ кидать или путь сменить)
Добавлено2012.11.10 20-41
Сегодня обнаружился страшный баг. Человек может зайти через одноклассники и тогда его ник будет представлять собой Imya.Familiya но это не поддерживается системой. Не знаю, что они не могут, но вот личку ему я не смог написать. Нужно доработать скрипт, чтобы не торопил регистрировать, а предлогал сменить ник
Отправлено: 17 Янв 2013#4
ой я бы не советовал подобные интеграции на уровне ядра. Вы же не знаете что в том скрипте который вы тянете с чужого сервера. А даже если его хозяева добрые, то откуда гарантия что их завтра не ломанут и не подменят скрипт. А через него можно утянуть любые данные наших юзеров и ваши в том числе. Я планирую сделать именно собственный плагин для реги через контакт
Я горжусь тем, что создал бесплатную CMS - AtomX . И люблю нашу команду)
Отправлено: 17 Янв 2013#5
Drunya пишет:
Вы же не знаете что в том скрипте который вы тянете с чужого сервера. А даже если его хозяева добрые, то откуда гарантия что их завтра не ломанут и не подменят скрипт.
Drunya пишет:
через контакт [smile]
Добавлено2013.01.17 14-58
Drunya пишет:
ой я бы не советовал подобные интеграции на уровне ядра.
Отредактировано автором 17 Янв 2013
Отправлено: 11 Апр 2013#6
Надо будет подумать как это именно плагином сделать. у меня есть идеи. Дома "поиграюсь". Но пока занят доработкой админки и адаптивным дизайном нашего сайта.
Я горжусь тем, что создал бесплатную CMS - AtomX . И люблю нашу команду)
Отправлено: 20 Фев 2014#7
а как сделать чтоб пользователь имел нормальное имя а не адрес своей страницы в соцсети ?
Отредактировано автором 20 Фев 2014
Отправлено: 20 Фев 2014#8
Sproot, ну эта тема уже не совсем актуальна, мы теперь перешли на ulogin с loginza. Окно с выбором ника появляется только если текущий занят или не соответствует требованиям, но можно и вручную изменить, покопавшись в базе и добавив запись в таблицу users_ulogin. Пожалуй, нужно переделать, чтобы смена ника была проще.
Отправлено: 21 Фев 2014#9
Сашка_из_Шебекино пишет:
мы теперь перешли на ulogin с loginza
видимо нужно пользователям разрешить менять имя
как бы это сделать чтоб можно было сменить только раз
Отправлено: 21 Фев 2014#10
Drunya 2013-04-11 пишет:
Надо будет подумать как это именно плагином сделать. у меня есть идеи. Дома "поиграюсь". Но пока занят доработкой админки и адаптивным дизайном нашего сайта.
Отредактировано автором 21 Фев 2014
Соразработчик Atom-M CMS
1
Зарегистрируйтесь или авторизуйтесь что бы писать
Сейчас online: 200. Зарегистрированных: 0. Гостей: 200.