刚开始使用Modx。
我按照说明通过登录包设置了用户的注册和授权https://itchief.ru/modx/login-registration
在网站上注册成功。但我需要,除了在网站本身上注册,还需要到另一个数据库(游戏)。
现在看起来太复杂了:
- 用户在网站上注册一个帐户;
- 进入信用证;
- 在个人账号中去链接注册一个游戏账号。
使用单独的代码段实现游戏帐户的注册:
<?php
//Подключение к игровой БД
if(!@mysql_connect('127.0.0.1','user','pswd') || !@mysql_select_db('db_name'))
echo "<div class='callout callout-danger'>
<h4>Сторонние силы вмешались в процесс!</h4>
</div>";
else {
$trules =
'<form name="reg_rules" method="post" action="">
<div class="callout callout-info">
<h4><i class="icon fa fa-info"></i> Прочти перед регистрацией!</h4>
<p>Текст</p>
</div>
<input type="hidden" name="step" value="2">
<input type="checkbox" name="rules"> Согласен<br>
<center><input type="submit" value="Далее" class="btn btn-block btn-success"> </center>
</form>';
$tform =
'<form name="reg_form" method="post" action="">
<div class="form-group has-feedback">
<input placeholder="Логин" name="login" type="text" class="form-control" maxlength="14">
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="email" placeholder="Email" type="text" class="form-control">
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="pass" placeholder="Пароль" type="password" class="form-control" maxlength="16">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input name="repass" placeholder="Повтор пароля" type="password" class="form-control" maxlength="16">
<span class="glyphicon glyphicon-log-in form-control-feedback"></span>
</div>
<input type="hidden" name="step" value="3">
<center><input type="submit" value="Создать" class="btn btn-block btn-success"></center>
</form>';
$step = $_POST['step'];
if (isset($_POST['step'])){
switch ($step){
case '2':{
$rules = $_POST['rules'];
if ($rules == "on")
//На шаге 2 выводится форма, если пользователь согласен с правилами
$centertext = $tform;
else
//Если не согласен
$centertext = '
<div class="callout callout-warning">
<h4>Что-то не так!</h4>
<p>Регистрация невозможна без согласия с правилами сервера!</p>
</div>
<center><input type="button" onclick="history.back(-2); return false;" value="Назад" class="btn btn-block btn-success"></center>
';
break;
}
case '3':{
if ((isset($_POST['login']))AND(isset($_POST['pass']))AND(isset($_POST['repass']))AND(isset($_POST['email']))){
$login = $_POST['login'];
$pass = $_POST['pass'];
$repass = $_POST['repass'];
$email = $_POST['email'];
$ip = $_SERVER["REMOTE_ADDR"];
if(strlen($login) < 6 or strlen($login) > 16)
$err[] = '<div class="callout callout-warning"><p>Минимальная длинна логина - 6 символов. Максимальная длина логина - 16 символов</p></div>';
if(strlen($pass) < 8 or strlen($pass) > 16)
$err[] = '<div class="callout callout-warning"><p>Минимальная длинна пароля - 8 символов. Максимальная длина пароля - 16 символов</p></div>';
if($pass==$login)
$err[] = '<div class="callout callout-warning"><p>Не разрешено использовать одинаковые логин и пароль</p></div>';
if($pass!=$repass)
$err[] = '<div class="callout callout-warning"><p>Введенные пароли не совпадают</p></div>';
if(!preg_match("/^[A-Za-z0-9]{6,}$/",$login))
$err[] = '<div class="callout callout-warning"><p>Логин содержит запрещенные символы.</p></div>';
if(!preg_match("/^[A-Za-z0-9]{6,}$/",$pass))
$err[] = '<div class="callout callout-warning"><p>Пароль содержит запрещенные символы.</p></div>';
if(!eregi("^[a-zA-Z0-9]+[_a-zA-Z0-9-]*(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,4})$", $email))
$err[] = '<div class="callout callout-warning"><p>Не правильный формат адреса электронной почты</p></div>';
if (preg_match('/[а-я]/i', $pass))
$err[] = '<div class="callout callout-warning"><p>Пароль не может содержать кириллицу</p></div>';
if (preg_match('/[а-я]/i', $login))
$err[] = '<div class="callout callout-warning"><p>Логин не может содержать кириллицу</p></div>';
if ($err!='')
$centertext = implode('', $err);
}
else{
$centertext = '<div class="callout callout-warning"><p>Не заполнены все обязательные поля.</p></div>';
}
if ($centertext ==""){
$db = mysql_pconnect('127.0.0.1','user','pswd');
mysql_query('SET CHARACTER SET utf8mb4');
mysql_select_db('db_name');
$result = mysql_query("SELECT login FROM `accounts` WHERE login='$login'");
if(mysql_num_rows($result)==0){
$gamepass = base64_encode(hash('whirlpool', $pass, true));
mysql_query("INSERT INTO accounts(login, password, lastactive, accessLevel, lastIP, lastServerID, l2email) VALUES('".$login."' , '".$gamepass."', '1', '0', '".$ip."', '1', '".$email."');") or die(mysql_error());
$centertext = "Добро пожаловать. Аккаунт $login успешно создан.";
}
else{
$centertext = "К сожалению этот логин уже занят.";
}
}
break;
}
default:{
$centertext = "";
}
}
}
if ($centertext == "")
$centertext = $trules;
echo $centertext;
}
我想进行一次注册,以便在网站上创建帐户时,立即创建一个游戏帐户。因此,在更改帐户密码时,游戏帐户的密码也会更改。
但是我不知道如何以及在哪里更改登录包代码以添加与游戏数据库的连接,并且注册和更改密码时的数据已写入游戏数据库。
请帮忙。
尝试使用
&postHooks
参数:指定片段的名称,该片段在主库中注册后,也会在自定义库中注册。当然,所有的逻辑都必须写在代码片段中,如何使用它们,例如,你可以在这里看到:https ://docs.modx.com/current/en/extras/login/login.tutorials/ using-pre-and-post-hooks#switchsettings posthooks在注册后立即执行,也preHooks
有,在主注册前触发,但在字段验证后,突然也会因为其他原因派上用场。