Новости | 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) }