Аторизация через никнейм
Через почту очень не удобно. Может есть компонент?
А так интересное решение авторизация с помощью никнейма или почты. Вот только Ников может быть несколько одинаковых…
У меня на сайте сделано хуком. Могу выложить хук с инструкцией.Да, но ведь затрагиваются системные файлы и при обновлении все пропадет
Но системный файл все равно придется править. Чтобы закомментировать проверку на мыльность.
Вот тема:
instantcms.ru/forum/thread21606-1.html
Файл изменяем. строчка 235
\system\core\user.php
/**
* Авторизует пользователя
* @param string $email
* @param string $password
* @param bool $remember
* @return int
*/
public static function login($email, $password, $remember=false) {
if (!preg_match("/^([a-z0-9\._-]+)@([a-z0-9\._-]+)\.([a-z]{2,6})$/i", $email)){
return 0;
}
$model = cmsCore::getModel('users');
$model->filterIsNull('is_deleted');
$model->filterEqual('email', $email);
$model->filterFunc('password', "MD5(CONCAT(MD5('{$password}'), i.password_salt))");
$user = $model->getUser();
if(!$user) {
$user = cmsEventsManager::hook('user_auth_error', array('email'=>$email,'password'=>$password));
}
if (empty($user['id'])) { return 0; }
$user = cmsEventsManager::hook('user_login', $user);
self::setUserSession($user);
if ($remember){
$auth_token = string_random(32, $email);
self::setCookie('auth', $auth_token, AUTH_TOKEN_EXPIRATION_INT); //100 дней
$model->setAuthToken($user['id'], $auth_token);
$model->deleteExpiredToken($user['id'], AUTH_TOKEN_EXPIRATION_INT);
self::$auth_token = $auth_token;
}
$model->update('cms_users', $user['id'], array(
'ip' => self::getIp()
), true);
return $user['id'];
}
Изменяем файл виджет авторизация
/templates/default/widgets/auth
строчка
<label><?php echo LANG_EMAIL; ?>:</label>
Заменить на:
<label><?php echo LANG_NICKNAME; ?>:</label>
изменяем файл виджета
/templates/default/controllers/auth/login.tpl.php
строчка
<div class="label"><label><?php echo LANG_EMAIL; ?>:</label></div>
заменить на
<div class="label"><label><?php echo NICKNAME; ?>:</label></div>
При обновлении системы повторить операцию. Надеюсь это кому-то пригодиться.