Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Форма восстановления пароля пользователя

22.06.2023, 18:38
IIIu6ko

Зарегистрирован:
2023-06-21
Сообщений: 3

Добрый день. Реально ли сделать форму восстановления пароля в всплывающем окне? Если реально, то как?
У меня есть всплывающее окно с формой авторизации. Под этой формой в всплывающем окне есть кнопка "восстановить пароль" по клику на которую всплывает ещё одно окно уже с формой восстановление. В документации увидел только способ с внешней ссылкой у раздела.

С авторизации всё просто получилось, просто ссылку в action указал и нужные поля в форму добавил, а с восстановлением такое не прокатило.
18.07.2023, 14:16
woobla
Виталий Коваль/Woobla
woobla

Зарегистрирован:
2017-06-02
Сообщений: 8

Создать по пути /netcat/modules/userClass файл userClass.php с кодом
Код:

include_once $_SERVER["DOCUMENT_ROOT"].'/vars.inc.php';
include_once $_SERVER["DOCUMENT_ROOT"].'/netcat/connect_io.php';
include_once $_SERVER["DOCUMENT_ROOT"].'/modules/default/function.inc.php';
include_once $_SERVER["DOCUMENT_ROOT"].'/netcat/system/essences/nc_user.class.php';
class useOp extends nc_User {
public function authorize_by_pass($login, $password, $captcha = null) {
$login = trim($login);
$nc_core = $this->core;

static $results = array();
$cache_key = "$login\n$password\n$captcha";

if (isset($results[$cache_key])) {
return $results[$cache_key];
}

// Проверка каптчи (если необходимо)
// каптча указана неправильно
//if ($this->captcha_is_required() && !nc_captcha_verify_code($captcha)) {
// // каптча была передана
// $this->captcha_is_invalid = true;
// $this->captcha_is_missing = strlen($captcha) === 0;
// $this->update_user_login_counter($login);
// $results[$cache_key] = false;
// return false;
//}

$current_catalogue = $nc_core->catalogue->get_by_host_name($_SERVER['HTTP_HOST']);
$catalogue = (int)$current_catalogue['Catalogue_ID'];

$bind_to_catalogue = '';
if ($nc_core->modules->get_by_keyword('auth') && $nc_core->get_settings('bind_to_catalogue', 'auth')) {
$bind_to_catalogue = " AND `u`.Catalogue_ID IN(0, {$catalogue})";
}

$user_result = $this->db->get_results(
"SELECT u.*, ug.`PermissionGroup_ID` AS PermissionGroups_ID
FROM `User` as u, `User_Group` as ug
WHERE u.`{$this->core->AUTHORIZE_BY}` = '{$this->db->escape($login)}'
AND u.`Password` = {$this->core->MYSQL_ENCRYPT}('{$this->db->escape($password)}')
AND u.`Checked` = 1
AND u.User_ID = ug.`User_ID`
{$bind_to_catalogue}
ORDER BY ug.ID",
ARRAY_A
);

$this->update_user_login_counter($login, (bool)$user_result);

if (!$user_result) {
return false;
}

$AUTH_USER_ID = $user_result[0]['User_ID'];

$nc_core->event->execute(nc_Event::BEFORE_USER_AUTHORIZED, $AUTH_USER_ID);

$this->create_session($AUTH_USER_ID);
$this->init_user($user_result);

$nc_core->event->execute(nc_Event::AFTER_USER_AUTHORIZED, $AUTH_USER_ID);

//$results[$cache_key] = $AUTH_USER_ID;
if(empty($AUTH_USER_ID)){
$results[$cache_key] = 0;
}else{
$results[$cache_key] = $AUTH_USER_ID;
}

return $results[$cache_key];
}

public function get_id($login, $user_id = 0) {

$user_id = (int)$user_id;
$auth_by = $this->db->escape($this->core->AUTHORIZE_BY);
$escaped_login = $this->db->escape($login);

$exclude_given_user = $user_id ? " AND `User_ID` != '{$user_id}'" : '';

$current_catalogue = $this->core->catalogue->get_by_host_name($_SERVER['HTTP_HOST']);
$catalogue = (int)$current_catalogue['Catalogue_ID'];
$bind_to_catalogue = '';

if ($this->core->modules->get_by_keyword('auth')) {
if ($this->core->get_settings('bind_to_catalogue', 'auth')) {
$bind_to_catalogue = " AND `Catalogue_ID` IN (0, {$catalogue})";
}
}

// проверка существования логина
$user_found = $this->db->get_var(
"SELECT `User_ID`
FROM `User`
WHERE `{$auth_by}` = '{$escaped_login}' " .
$exclude_given_user .
$bind_to_catalogue
);

return $user_found;
}

}


В /netcat/modules/default/function.inc.php сверху добавить
Код:
include_once $_SERVER["DOCUMENT_ROOT"].'/netcat/modules/userClass/userClass.php';


создать компонент для восстановления пароля и привязать его к нужному пути в структуре например /api/user/forgotten/
В Системные настройки: ему пишешь
Код:


ob_start();
// очищаем буфер вывода
ob_clean();
header("Content-type: application/json;charset=utf-8");
$userClass = new useOp;

$userFind = $userClass->check_login($login);
if($userFind==0){
$arrResponse["message"] = 'Указан неверный логин';
}else{
//change_password
$userId = $userClass->get_id($login);

//Генерация нового пароля
$newPass = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 9);

$userClass->change_password($userId,$newPass);//Пароль отправлять строкой неткат сам его зашифрует
/*
//////////////
//ОТСЫЛАЕШЬ ПАРОЛЬ КАК ТЕБЕ НАДО
//////////////
*/
$arrResponse["message"] = 'Ваш пароль изменен и отправлен на Емайл\Телефон';
}
echo json_encode($arrResponse);
exit();


web@woobla.ru
198 196 2023-07-18 14:16:35 15359
Описание проекта