Шаг второй. Регистрация и авторизация пользователей.

by SeoCoder on Май 15, 2009

Начнем как и говорил ранее, с регистрации адвертов и авторизации их в админку.
Для этих целей за основу возьмем готовую либу UserLib – http://codeigniter.com/wiki/Userlib/ и обработаем ее напильником.
Распакуем скачанный файл в system\application\libraries\Userlib.php
Теперь подредактируем конфиг – system\application\config\config.php

$config[‘sess_use_database’]  = TRUE; // хранить сессии в базе

и правим system\application\config\autoload.php, то что должно грузиться автоматом.

$autoload['libraries'] = array(‘database’, ‘session’, ‘Userlib’ );

Таблицу юзеров мы уже сделали в первой части. Сейчас сделаем таблицу для хранений сессий.

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) UNSIGNED DEFAULT 0 NOT NULL,
user_data text NOT NULL,
PRIMARY KEY (session_id)
);

Если вдруг кому то, нужен конфирм регистраций юзера и мыла — можем использовать еще временную таблицу. Если со структуры не понятно, что делает тут эта таблица. Спрашиваем в комменты. ;)

CREATE TABLE IF NOT EXISTS `guid` (
  `idguid` smallint(6) NOT NULL AUTO_INCREMENT,
  `useridguid` smallint(6) NOT NULL,
  `textguid` varchar(32) DEFAULT NULL,
  PRIMARY KEY  (`idguid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

И сейчас подработаем напильником UserLib, что скачали.

Нас интересуют 5 методов:

  • register( $username, $password, $email, $status = ‘user’)
  • login( $username, $password )
  • logged_in( )
  • forgot( $email, $length )
  • logout()

Код приложен в конце поста, иначе читать, очень не удобно.
Теперь задача сделать формочки для ввода и логина и попробовать это в действии.
Создадим главный контроллер партнерки.
system\application\controllers\main.php отвечающий за вывод формы регистрации, логина и перехода в панель партнерки. Это пока единственный и главный файл, отвечающий за всю логику работы регистрации.

<?php
 
class Main extends Controller {
 
	function Main()
	{
		parent::Controller();
		$this->load->helper(array('url', 'form'));
		$this->load->library('form_validation');
 
	}
 
	function index()
	{
		$this->load->view('main_view');
	}
 
	function register() {
		$this->form_validation->set_rules('loginuser', 'Username',
		'trim|required|min_length[5]|max_length[32]|xss_clean');
		$this->form_validation->set_rules('passuser', 'Password',
		'required|min_length[5]|max_length[32]|matches[passconf]');
		$this->form_validation->set_rules('passconf', 'Password Confirmation',
		'required');
		$this->form_validation->set_rules('emailuser', 'Email',
		'trim|required|valid_email');
 
		if ($this->form_validation->run() == false) {
			$this->load->view('main_register');
		} else {
			$this->userlib->register($this->input->post('loginuser', true), $this->input->
			post('passuser', true),  $this->input->post('emailuser', true));
			$this->load->view('main_succses.php');
		}
 
	}
 
	function login() {
		$this->userlib->login($this->input->post('idlogin', true), $this->input->
		post('idpassword', true));
		$this->load->view('main_login.php');
	}
 
	function logout() {
		$this->userlib->logout();
		redirect('', 'refresh');
	}
}

И создадим сразу несколько шаблонов для этих форм.
system\application\views\main_view.php // для отображения стартовой страницы
system\application\views\main_login.php // для отображения формы логина
system\application\views\main_register.php // для отображения формы регистрации
system\application\views\main_succses.php // для успешной регистрации
system\application\views\main_fail.php // для ошибки при регистрации
system\application\views\main_usercp.php // для отображения юзерской части партнерки

Отредактируем system\application\config\routes.php, указав
$route['default_controller'] = «main»;

Форма регистрации и форма логина очень проста. Исходники как и говорил, найдете в конце статьи.
Чтобы не только поверить мне на слово, а проверить в работе то что мы сделали за минут 15, поднимите у себя на денвере сайт part.ru и распакуйте архив что приложен. Также залейте дамп и отредактируйте доступ к базе.
Конечно можно и нужно залить на другой домен, поправив соответствующие конфигурационные файлы, описанные в первой части.

А это свежая и правильная структура базы, ведь это все я пишу вместе с вами, рассказывая возможности фреймворка.

CREATE TABLE `ci_sessions` (
  `session_id` varchar(40) NOT NULL DEFAULT '0',
  `ip_address` varchar(16) NOT NULL DEFAULT '0',
  `user_agent` varchar(50) NOT NULL,
  `last_activity` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `user_data` text NOT NULL,
  PRIMARY KEY  (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(70) DEFAULT NULL,
  `email` varchar(50) NOT NULL,
  `ip` bigint(10) NOT NULL,
  `groupuser` enum('user','admin','banned','notactive') NOT NULL DEFAULT 'notactive',
  `balance` decimal(10,4) NOT NULL DEFAULT '0.0000',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

Скачать архив второго шага.

Фух. Завтра ждите продолжения. Теперь я буду выкладывать только папку application – ее и надо будет заменять тем, что выше.
P.S. Разверните проект, поиграйтесь с кодом, поизучайте. Все очень предельно ясно и логично.

{ 11 comments… read them below or add one }

1 medar 05.15.09 at 19:26

А я из авторизации юзаю обычно Freak Auth.

2 Владимир 05.15.09 at 19:31

Возник вопрос насчет «подработаем напильником UserLib». Я подумал, что вы собираетесь изменять код библиотеки, но в примере приведен только код контроллера. Т.к. с я с UserLib не работал не понятно нужно ее дорабатывать или она нормально работает?

Ещё вопрос по поводу подтверждения по email. С базой все понятно, но, по-моему, в контроллер нужно добавить метод, который будет вызываться при переходе пользователя по ссылке подтверждения. Или в UserLib эта функция реализована иначе?

P.S. Очень интересное начало. Жду продолжения.

3 SeoCoder 05.15.09 at 20:07

UserLib выложена в архиве, доработанная.
В подтверждением у меня сделано так, генерим guid, отправляем на мыло типа так
http://site.com/confirm/GUID
Ну и подтверждаем. ;)

4 SeoCoder 05.15.09 at 20:08

Они все не простые, а UserLib маленькая да удаленькая.

5 Думаю 06.23.09 at 09:53

и где продолжение =) ?

6 SeoCoder 06.23.09 at 10:06

Никто не просил его – я решил что не интересно.

7 Думаю 06.23.09 at 10:40

В обще в совершенстве было бы не плохо если бы вы хотя бы комментарием написали бы – как оформить минимальную проверку на админа, типа админ или не админ.

Подсказали бы как подредактировать регистрацию, что бы IP писался полностью, и если был такой IP в базе то регистрация не разрешалась типа писалось ваш IP и вы уже зареганы

и почему у меня от IP тока 4 первых цифры пишется типа 1270 ? место 127.0.0.1 ?

8 Костик 09.16.09 at 08:49

Очень интересная серия статей. Очень был бы благодарен за продолжение!

9 mrDumay 09.16.09 at 18:57

ага, уже с пол года ждём (*

10 MarafoN 10.07.09 at 08:49

Продолжай. :)

11 Александр 01.24.10 at 23:57

А не могли бы вы написать скрипт партнёрской программы с оплатой за покупку товара!
Всё как таковое есть, а именно, ID уже присвоен, показывает общий баланс, не могу реализовать именно саму ччылку партнёрскую, чтоб потом при оплате, реферу шли проценты!! (((
Может кто подскажет как. . .

Leave a Comment

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">