Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: В настоящее время эта функция требует доступа к сайту с помощью встроенного браузера Safari.
Можно плагином расширить функцию регистрациитебе прийдётся копатся в самом движке Ксюхи. что не есть хорошо.
Можно плагином расширить функцию регистрации
А лучше чтобы не изобретать велосипед посмотреть как сделано в других интеграциях
Такой вариант не плохой, но не очень будет красиво выводить при регистрации 2 капчи. Ведь у моей реги уже есть капча от гугла.Отснифай регистрацию, и дальше в софте передавай POST данные на соответствующею страницу. При этом ты еще должен парсить капчу и выводить ее пользователю.
Так не получится. XF выведет тебе одну капчу, а ты будешь ей передавать совершенно другую. Есть способ гораздо круче, отключить капчу при регистрации в XF (: .У ксени тоже капча от гугла есть и так думаю что можно просто передать значение из моей капчи ксени.
Так не получится. XF выведет тебе одну капчу, а ты будешь ей передавать совершенно другую. Есть способ гораздо круче, отключить капчу при регистрации в XF (: .
<?php
function del_char($string, $re = ' '){
return trim(preg_replace('/(\s{2,})|(\")|(\')/', ' ', $string));
}
function valid_email($email){
if(preg_match("/^(?:[a-z0-9]+(?:[-_.]?[a-z0-9]+)?@[a-z0-9_.-]+(?:\.?[a-z0-9]+)?\.[a-z]{2,5})$/i",trim($email))) return true; else return false;
}
function user_register_xenforo($userinfo){
$userinfo = array_merge(
array(
'language_id' => '2', // Язык: Русский(2).
'user_group_id' => '2', // Группа: Зарегестрированные(2).
'secondary_group_ids' => '',
'permission_combination_id' => '2',
'timezone' => 'Europe/Moscow',
), $userinfo
);
if (
$userinfo['username'] == '' ||
$userinfo['email'] == '' ||
$userinfo['password'] == ''
) return false;
$user_login = del_char($userinfo['username'], '');
if (valid_email($email)) return false;
$user_email = $email;
$lang_id = $userinfo['language_id'];
$user_group_id = $userinfo['user_group_id'];
$secondary_group_ids = $userinfo['secondary_group_ids'];
$permission_combination_id = $userinfo['permission_combination_id'];
$password_hash = 'a:1:{s:4:"hash";s:60:"'.password_hash($userinfo['password'], PASSWORD_DEFAULT).'";}';
$dob_day = $userinfo['dob_day'];
$dob_month = $userinfo['dob_month'];
$dob_year = $userinfo['dob_year'];
$timezone = $userinfo['timezone'];
$is_user_row = mysql_query("SELECT COUNT(user_id) FROM `xf_user` WHERE `username`='$user_login'");
$is_user = mysql_fetch_array($is_user_row);
if ($is_user[0] != '0') return false;
mysql_query("INSERT INTO `xf_user`(`username`, `email`, `language_id`, `timezone`, `user_group_id`, `secondary_group_ids`, `permission_combination_id`) VALUES ('$user_login','$user_email','$lang_id', '$timezone', '$user_group_id', '$secondary_group_ids', '$permission_combination_id')");
$mysql = mysql_query("SELECT `user_id` FROM `xf_user` WHERE `username`='$user_login'");
$user_id_row = mysql_fetch_array($mysql);
$user_id = $user_id_row[0];
mysql_query("INSERT INTO `xf_user_authenticate`(`user_id`,`scheme_class`,`data`,`remember_key`) VALUES ('$user_id', 'XenForo_Authentication_PhpBb3', '$password_hash','0')");
mysql_query("INSERT INTO `xf_user_option`(`user_id`) VALUES ('$user_id')");
mysql_query("INSERT INTO `xf_user_privacy`(`user_id`) VALUES ('$user_id')");
mysql_query("INSERT INTO `xf_user_profile`(`user_id`, `dob_day`, `dob_month`, `dob_year`) VALUES ('$user_id', '$dob_day', '$dob_month', '$dob_year')");
return true;
}
$userinfo = array(
'username' => 'user',
'email' => '[email protected]',
'password' => '123456789',
'dob_day' => '22',
'dob_month' => '02',
'dob_year' => '2016',
);
mysql_connect('localhost','123123','1231231');
mysql_select_db('124312341');
if(user_register_xenforo($userinfo)) echo '1'; else echo '0';
?>
А вот это можно. Ток куда передовать POST запрос, вот в чом вопрос.
Не стал возится с ксеней и мучить ей, а просто написал небольшую функцию которая сама заносит данные в основные таблицы.
Ну есть конечно грубые ошибки по отношению к ксени, но она все сама исправляет в итоге.
Это начальный код, щас начну его рассматривать, коментировать строчки (Ибо редко это делаю), добавлять проверки и тд. ну и исправлять жестокие ошибки.Код:<?php function del_char($string, $re = ' '){ return trim(preg_replace('/(\s{2,})|(\")|(\')/', ' ', $string)); } function valid_email($email){ if(preg_match("/^(?:[a-z0-9]+(?:[-_.]?[a-z0-9]+)?@[a-z0-9_.-]+(?:\.?[a-z0-9]+)?\.[a-z]{2,5})$/i",trim($email))) return true; else return false; } function user_register_xenforo($userinfo){ $userinfo = array_merge( array( 'language_id' => '2', // Язык: Русский(2). 'user_group_id' => '2', // Группа: Зарегестрированные(2). 'secondary_group_ids' => '', 'permission_combination_id' => '2', 'timezone' => 'Europe/Moscow', ), $userinfo ); if ( $userinfo['username'] == '' || $userinfo['email'] == '' || $userinfo['password'] == '' ) return false; $user_login = del_char($userinfo['username'], ''); if (valid_email($email)) return false; $user_email = $email; $lang_id = $userinfo['language_id']; $user_group_id = $userinfo['user_group_id']; $secondary_group_ids = $userinfo['secondary_group_ids']; $permission_combination_id = $userinfo['permission_combination_id']; $password_hash = 'a:1:{s:4:"hash";s:60:"'.password_hash($userinfo['password'], PASSWORD_DEFAULT).'";}'; $dob_day = $userinfo['dob_day']; $dob_month = $userinfo['dob_month']; $dob_year = $userinfo['dob_year']; $timezone = $userinfo['timezone']; $is_user_row = mysql_query("SELECT COUNT(user_id) FROM `xf_user` WHERE `username`='$user_login'"); $is_user = mysql_fetch_array($is_user_row); if ($is_user[0] != '0') return false; mysql_query("INSERT INTO `xf_user`(`username`, `email`, `language_id`, `timezone`, `user_group_id`, `secondary_group_ids`, `permission_combination_id`) VALUES ('$user_login','$user_email','$lang_id', '$timezone', '$user_group_id', '$secondary_group_ids', '$permission_combination_id')"); $mysql = mysql_query("SELECT `user_id` FROM `xf_user` WHERE `username`='$user_login'"); $user_id_row = mysql_fetch_array($mysql); $user_id = $user_id_row[0]; mysql_query("INSERT INTO `xf_user_authenticate`(`user_id`,`scheme_class`,`data`,`remember_key`) VALUES ('$user_id', 'XenForo_Authentication_PhpBb3', '$password_hash','0')"); mysql_query("INSERT INTO `xf_user_option`(`user_id`) VALUES ('$user_id')"); mysql_query("INSERT INTO `xf_user_privacy`(`user_id`) VALUES ('$user_id')"); mysql_query("INSERT INTO `xf_user_profile`(`user_id`, `dob_day`, `dob_month`, `dob_year`) VALUES ('$user_id', '$dob_day', '$dob_month', '$dob_year')"); return true; } $userinfo = array( 'username' => 'user', 'email' => '[email protected]', 'password' => '123456789', 'dob_day' => '22', 'dob_month' => '02', 'dob_year' => '2016', ); mysql_connect('localhost','123123','1231231'); mysql_select_db('124312341'); if(user_register_xenforo($userinfo)) echo '1'; else echo '0'; ?>
Код рабочий. После его выполнения стал доступен юзер "user" с паролем "123456789".
Думаю сделать небольшую библиотеку для таких же кто хочет сделать регу в ксени используя свой скрипт авторизации.
Готово.
username=&2be4c5f0de845340239ce47982b949aa=Vlad&68a36a6cc566250b15c26752d08ee9b5=mail%40mail.ru&69f076c01c3866c4bd47030ad6711fca=123&c4db848d4070d48ec2c5f0ee79d9b8be=123&56c96e11fff35fba2798464c41e8702b=&32511f483d3c587a7fb268d6bd184cf0=male&dob_month=2&dob_day=1&dob_year=1997&5ca38b4992fde286573867cd6afd66da=Europe%2FMoscow&agree=1&_xfToken=®_key=c00313db20407f9af4e614c1c69f0407
$this->uniqueKey = \XF::generateRandomString(16);
/**
* Generates a psuedo-random string of the specified length.
*
* @param integer $length
* @param boolean $raw If true, raw binary is returned, otherwise modified base64
*
* @return string
*/
public static function generateRandomString($length, $raw = false)
{
if ($raw)
{
return \XF\Util\Random::getRandomBytes($length);
}
else
{
return \XF\Util\Random::getRandomString($length);
}
}
public static function getRandomBytes($length)
{
if (self::$sources === null)
{
self::$sources = self::getAvailableSources();
}
$length = intval($length);
if ($length < 1)
{
throw new \LogicException("Must fetch 1 or more random bytes");
}
$output = '';
$remaining = $length;
$lastUsed = null;
foreach (self::$sources AS $type => $fn)
{
$result = self::$fn($remaining);
if (is_string($result) && $added = strlen($result))
{
$lastUsed = $type;
$output .= $result;
$remaining -= $added;
if ($remaining <= 0)
{
break;
}
}
}
if (strlen($output) < $length)
{
throw new \ErrorException("Could not generate random bytes of significant length");
}
self::$lastUsed = $lastUsed;
return substr($output, 0, $length);
}
public static function getRandomString($length)
{
$random = self::getRandomBytes($length);
$string = strtr(base64_encode($random), [
'=' => '',
"\r" => '',
"\n" => '',
'+' => '-',
'/' => '_'
]);
return substr($string, 0, $length);
}
Мы используем основные cookies для обеспечения работы этого сайта, а также дополнительные cookies для обеспечения максимального удобства пользователя.
Посмотрите дополнительную информацию и настройте свои предпочтения