| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
foof 13.05.2009 22:01
Всем здравствуйте!@CLASS
auth
#Методы:
#@status[] - Елемент на всех страницах сайта, который выводит либо информацию о пользователе, либо форму логина
#@login[] - Авторизация пользователя на сайте
#@logout[] - выход из системы
#@loginForm[msg] - Выводит форму для логина, где $msg - сообщение об ошибке
#@registration[] - Регистрация новых пользователей
#@activation[] - Активация аккаунта
#@regform[msg] - Выводит форму регистрации, где $msg - сообщение об ошибке
#@isEmail[email] - проверяет e-mail на корректность
#@sendEmail[login;hash] посылает письмо после регистрации с активационным ключом, где $login - имя пользователя, а $hash - активационный код
#@userId[] - Идентификация пользователя по кукам
#Елемент на всех страницах сайта, который выводит либо информацию о пользователе, либо форму логина
@status[]
^if(^userId[] != 0){
^try{
^MAIN:esconnect{$user[^table::sql{SELECT `id`,`login` FROM `user` WHERE `session` = '$cookie:session'}]}
<a href=/profile.html?id=$user.id>$user.login</a> <a id="logout" href="/logout.html">Выход</a>
}{
$exception.handled(1)
^loginForm[]
}
}{
^loginForm[]
}
#Авторизация пользователя на сайте
@login[]
^if(def $form:login && def $form:password){
^try{
$login[$form:login]
$login[^login.trim[]]
$password[$form:password]
$password[^password.trim[]]
^MAIN:esconnect{$user[^table::sql{SELECT `id`,`login`, `password`, `status` FROM `user` WHERE `login` = '$login'}]}
^if(^math:crypt[$password;$user.password] eq $user.password){
^if($user.status == 1){
$str[^math:uuid[]]
$hash[^math:sha1[$str]]
$now[^date::now[]]
^MAIN:esconnect{^void:sql{UPDATE `user` SET `session` = '$hash', `lastlogin` = '^now.sql-string[]' WHERE `id` = '$user.id'}}
$cookie:session[
$.value[$hash]
$.expires(30)
]
$response:location[/$form:uri]
}{
^loginForm[Ваш аккуант не активирован]
}
}{
^loginForm[Вы ввели неверный логин или пароль]
}
}{
$exception.handled(1)
^loginForm[Вы ввели неверный логин или пароль]
}
}{
^if(^userId[] == 0){
^loginForm[]
}{
Вы уже авторизированны!
}
}
#выход из системы
@logout[]
^try{
^MAIN:esconnect{^void:sql{UPDATE `user` SET `session` = '' WHERE `session` = '$cookie:session'}}
$msg[Вы успешно вышли из системы!]
^loginForm[$msg]
}{
$exception.handled(1)
$msg[Вы успешно вышли из системы! Но возникла проблема с БД!]
^loginForm[$msg]
}
$cookie:session[]
#Выводит форму для логина
#msg - сообщение об ошибке
@loginForm[msg]
^if(!def $msg){$msg[<a href="/registration.html">Регистрация</a>]}
<form id="loginform" action="/login.html" method="post">
Логин: <input type="text" name="login" /><br>
Пароль: <input type="password" name="password" /><br>
<input type="hidden" name="uri" value="$request:uri">
<input type="submit" name="go" value="Войти" />
</form>
<span id="msg">$msg</span>
#Регистрация новых пользователей
@registration[]
^if($form:go eq "Зарегистрироваться"){
^if(def $form:login && def $form:password && def $form:password2 && def $form:email){
^try{
^MAIN:esconnect{$user(^string:sql{SELECT COUNT(`id`) FROM `user` WHERE `login` = '$form:login'})}
^if($user == 0){
^if($form:password eq $form:password2){
^if(^isEmail[$form:email]){
^MAIN:esconnect{$email(^string:sql{SELECT COUNT(`id`) FROM `user` WHERE `email` = '$form:email'})}
^if($email == 0){
$login[$form:login]
$password[$form:password]
$password[^password.trim[]]
$password[^math:crypt[$password;^$apr1^$]]
$email[$form:email]
$now[^date::now[]]
$str[^math:uuid[]]
$hash[^math:sha1[$str]]
^MAIN:esconnect{^void:sql{INSERT INTO `user` (`login`, `password`, `email`, `session`, `regdate`) VALUES ('^login.trim[]', '$password', '^email.trim[]', '$hash', '^now.sql-string[]')}}
$login[^login.trim[]]
^sendEmail[$login;$hash]
Поздравляем! Вы успешно зарегистрировались!
}{
^regform[Пользователь с таким e-mail уже существует]
}
}{
^regform[E-mail введён некорректно]
}
}{
^regform[Пароли не совпадают]
}
}{
^regform[Пользователь с таким именем уже существует]
}
}{
$exception.handled(1)
^regform[Ошибка]
}
}{
^regform[Заполните все поля формы]
}
}{
^regform[]
}
#Активация аккаунта
@activation[]
^if(def $form:code){
^try{
^MAIN:esconnect{^void:sql{UPDATE `user` SET `session` = '', `status` = '1' WHERE `session` = '$form:code'}}
Поздравляем! Ваш аккаунт успешно активирован!
}{
$exception.handled(1)
Произошла ошибка
}
}{
Нужен код активации!
}
#Выводит форму регистрации
#msg - сообщение об ошибке
@regform[msg]
<span id="msg">$msg</span>
<form id="regform" method="post">
Логин: <input type="text" name="login" /> <br />
Пароль: <input type="password" name="password" /> <br />
Подтвердите пароль: <input type="password" name="password2" /> <br />
E-mail: <input type="text" name="email" /> <br />
<input type="submit" name="go" value="Зарегистрироваться" />
</form>
#проверяет e-mail на корректность
@isEmail[email]
$result(
^email.match[^^(?:[-a-z\d\+\*\/\?!{}`~_%&'=^^^$#]+(?:\.[-a-z\d\+\*\/\?!{}`~_%&'=^^^$#]+)*)@(?:[-a-z\d_]+\.){1,60}[a-z]{2,6}^$][i]
)
#посылает письмо после регистрации с активационным ключом
#login - имя пользователя
#hash - активационный код
@sendEmail[login;hash]
^try{
^MAIN:esconnect{$email[^string:sql{SELECT `email` FROM `user` WHERE `login` = '$login'}]}
^mail:send[
$.from[info@site.ru]
$.to[$email]
$.subject[Регистрация на сайте site.ru]
$.text[
Здравствуйте, ${login}!
Спасибо за регистрацию на сайте site.ru
http://site.ru/activation.html?code=$hash
]
]
}{
$exception.handled(1)
^regform[Ошибка при отправке письма]
}
#Идентификация пользователя по кукам
#Результат: либо id пользователя, либо 0, если гость
@userId[]
^try{
^MAIN:esconnect{$id(^string:sql{SELECT COUNT(`id`) FROM `user` WHERE `session` = '$cookie:session'})}
^if($id == 1){
^MAIN:esconnect{$id(^string:sql{SELECT `id` FROM `user` WHERE `session` = '$cookie:session'})}
$result($id)
}{
$result(0)
}
}{
$exception.handled(1)
$result(0)
}