kissmumu 发表于 2010-1-26 09:04:21

CodeIgniter 和 Doctrine 从零开始 第四天 用户登录 上

CodeIgniter 和 Doctrine 从零开始第四天:用户登录我们按以下步骤建立一个用户登录系统:l
建立登录表单视图和登录控制器l
学习一些URL helpersl
改变默认控制器l
进行用户认证l
学习单例模式,并用它改善我们的代码设计l
学习Sessions libraryl
进行用户登出登录表单视图我们首先创建登录表单视图 system/application/views/login_form.php<!DOCTYPE html><html lang="en"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Login Form</title>
<link rel="stylesheet" href="<?php echo base_url(); ?>css/style.css"
type="text/css" media="all"></head><body><div id="signup_form">
<p class="heading">User Login</p>
<?php echo form_open('login/submit'); ?>
<?php echo validation_errors('<p class="error">','</p>'); ?>
<p>
<label for="username">Username: </label>
<?php echo form_input('username',set_value('username')); ?>
</p>
<p>
<label for="password">Password: </label>
<?php echo form_password('password'); ?>
</p>
<p>
<?php echo form_submit('submit','Login'); ?>
</p>
<?php echo form_close(); ?>
<p>
<?php echo anchor('signup','Create an Account'); ?>
</p></div></body></html>Anchor()建立一个链接。<?php echo anchor('signup','Create an Account'); ?> 返回:<a href="http://localhost/ci_doctrine/signup">Create an Account</a>样式链接编辑样式表,让表单更好看。编辑 css/style.cssbody {
font-family: "Trebuchet MS",Arial;
font-size: 14px;
background-color: #212426;
color: #11151E;} a {
color: #FFF;} a:hover {
color: #B9AA81;} /* ... */红色部分为添加部分。编辑:system/application/views/signup_form.php 表单下面添加:
<p>
<?php echo anchor('login','Login Form'); ?>
</p>也就是添加了一个链接到login控制器,但是这个控制器还没有建立,下面我们建立它Login Controller建立system/application/controllers/login.php<?phpclass Login extends Controller {
public function __construct() {
parent::Controller();
$this->load->helper(array('form','url'));
$this->load->library('form_validation');
}
public function index() {
$this->load->view('login_form');
}
public function submit() {
if ($this->_submit_validate() === FALSE) {
$this->index();
return;
}         
redirect('/');
}
private function _submit_validate() {
}}除了红色部分,其它和上次的signup controller类似。Redirect()他是URL helper的一个函数,作用是转到指定的控制器。这里我们给了‘/’,就是转到home page 也就是 默认控制器。所以,这里会跳转到 http://localhost/ci_doctrine/测试登录控制器和视图访问:http://localhost/ci_doctrine/login
现在,点击 Create an Account
你会看到我们以前的Signup 表单页面
工作正常!默认控制器当用户没有输入控制器名称,会调用默认的控制器。现在我们输入:http://localhost/ci_doctrine/ 你会看到:

因为codeigniter的默认控制器为welcome。这里我们需要的默认控制器名为home。建立:system/application/controllers/home.php<?phpclass Home extends Controller {
public function index() {
echo "Home Sweet Home!";
}
}Routes File 路由文件编辑system/application/config/routes.php改变下面的值:// ...$route['default_controller'] = "home";$route['scaffolding_trigger'] = "";// ...Ok,现在访问 http://localhost/ci_doctrine/ 你会看到访问了我们的home控制器,显示: Home Sweet Home!用户登录鉴定现在我们给程序添加用户登录鉴定的功能。首先,我会告诉你一个简单也是常见的处理方式,过后,我会提供一个更好的方法。表单身份验证编辑: system/application/controllers/login.php<?phpclass Login extends Controller {
public function __construct() {
parent::Controller();
$this->load->helper(array('form','url'));
$this->load->library('form_validation');
}
public function index() {
$this->load->view('login_form');
}
public function submit() {
if ($this->_submit_validate() === FALSE) {
$this->index();
return;
}
redirect('/');
}          private function _submit_validate() {                   $this->form_validation->set_rules('username', 'Username','trim|required|callback_authenticate');
$this->form_validation->set_rules('password', 'Password','trim|required');                   $this->form_validation->set_message('authenticate','Invalid login. Please try again.');
return $this->form_validation->run();
}
public function authenticate() {
// 从username取得User对象
if ($u = Doctrine::getTable('User')->findOneByUsername($this->input->post('username'))) {
// 建立对象,为变异(加密)password
$u_input = new User();
$u_input->password = $this->input->post('password');
// 密码匹配 (比较加密的 passwords)
if ($u->password == $u_input->password) {
unset($u_input);
return TRUE;
}
unset($u_input);//注销这个为加密password而生的对象,防止意外保存到数据库里
}
return FALSE;
}}红色部分是更新过的。先给_submit_validate()函数,增加了一条规则(绿色部分)。这次用了Callback规则(callback_authenticate

),格式是:callback_第二回绿色部分,是callback_authenticate验证失败后返回的用户自定义错误信息。Authenticate 函数是回调(callback)函数,如果一切正常,返回真,否则返回假。测试表单首先,建立一个新的用户 http://localhost/ci_doctrine/signup现在访问,http://localhost/ci_doctrine/login 输入错误登录信息,你会看到:



如果输入正确的信息,你会转到 home page,看到 Home Sweet Home!我们的登录表单可以使用了。

tmnh168 发表于 2010-1-26 23:51:38

这个贴的排版太乱了点吧?

kissmumu 发表于 2010-1-27 09:09:57

回复 2# tmnh168


    是的,排版不好。而且发帖有字数限制。所以感触把1-8章的都打包提供下载了。还可以自己编辑。

Hex 发表于 2010-1-27 10:54:33

我有时间把这些逐渐整理到论坛上。

kazaff 发表于 2010-2-8 08:37:40

很久没看见这种帖子了~顶!

^淡如清风 发表于 2010-7-15 11:21:29

看后有点混乱

qicrosoft 发表于 2010-9-13 13:42:47

登录状态怎么保存,怎么没有写完整?

bugchen 发表于 2011-5-23 20:25:09

参考一下,多谢LZ!
页: [1]
查看完整版本: CodeIgniter 和 Doctrine 从零开始 第四天 用户登录 上