C

CodeIgniter设计验证登录

轻松学习 技术 2023-11-24

CodeIgniter设计验证登录

需求为在登录时验证账户是邮箱地址还是账户名,同时验证账户密码长度以及是否存在资料库中。

1. 登录界面设计

从DeskApp里面直接复制对应的html代码即可,同时需要注意这个在于将HTML进行切割成不同的layout 部分。这样方便后面的复用。针对页首页脚侧边栏等采用<?= include('inc/footer.php'); ?>)方式来引用。 而对于要传入的内容则使用 <?= $this->renderSection('content'); ?> ,在具体的页面里使用extend扩展其他页面,而section则传入相应的值。

<?= $this->extend('backend/layout/auth-layout')?>
<?= $this->section('content'); ?>
Auth page content here .........
<?= $this->endSection();?>

2. 控制器设置

在admin group下面增加login的get 和Post方法的控制器。分别用于打开login界面和提交登录系统。

  • $routes->view()可以直接展示view界面,而不用控制器中转。
  • 使用['as'=>'admin.handler']可以设置别名,方便在view界面进行控制,使用范例<form action="<?= route_to('admin.login.handler') ?> " method="POST">
$routes->group('admin',static function($routes){

        $routes->group('',[],static function($routes){

            $routes->get('home','AdminController::index',['as'=>'admin.home']);
            $routes->get('logout','AdminController::logoutHandler',['as'=>'admin.logout']);

        });
        $routes->group('',[],static function($routes){
            // $routes->view('example-auth','example-auth');
            $routes->get('login','AuthController::loginForm',['as'=>'admin.login.form']);
            $routes->post('login','AuthController::loginHandler',['as'=>'admin.login.handler']);

        });
});

3. Validation

是用$this->validate()方法去验证log_id 。rules为验证的规则,一般采用系统默认的一些规则。其中要注意的是is_not_unique,这个方法的参数是table.column,可以直接去数据库进行查询是否存在。

 public function loginHandler()
    {
        $fieldType = filter_var($this->request->getVar('login_id'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
        if ($fieldType == 'email') {
            //is_not_unique[table.column]是直接验证字段在表内的存在
            $isValid = $this->validate([
                'login_id' => [
                    'rules' => 'required|valid_email|is_not_unique[users.email]',
                    'errors' => [
                        'required' => 'Email is required',
                        'valid_email' => 'Email is not valid',
                        'is_not_unique' => 'Email is not exists in our system.'
                    ]
                ],
                'password' => [
                    'rules' => 'required|min_length[5]|max_length[45]',
                    'errors' => [
                        'required' => 'password is required',
                        'min_length' => 'min_length is 5',
                        'max_length' => 'max_length is 45.'
                    ]
                ]
            ]);
        } else {
            $isValid = $this->validate([
                'login_id' => [
                    'rules' => 'required|is_not_unique[users.username]',
                    'errors' => [
                        'required' => 'username is required',
                        'is_not_unique' => 'username is not exists in our system.'
                    ]
                ],
                'password' => [
                    'rules' => 'required|min_length[5]|max_length[45]',
                    'errors' => [
                        'required' => 'password is required',
                        'min_length' => 'min_length is 5',
                        'max_length' => 'max_length is 45.'
                    ]
                ]
            ]);
        }

4. 界面传参

在示例文件中,将view界面创建了一个validation实例。<?php $validation = \Config\Services::validation(); ?> 。而将控制器里面的实例$this->validator()传给了view界面的$validation。使用geterror()获取对应的验证信息。

<?php if ($validation->getError('login_id')) : ?>
            <div class="d-block text-danger" style="margin-top:-25px; margin-bottom:15px">
                <?= $validation->getError('login_id'); ?>
            </div>
 <?php endif; ?>

CodeIgniter设计登出

直接调用function移除session里面的相关数据。

    public static function forget()
    {
        $session = session();
        $session->remove('logged_in');
        $session->remove('userdata');
    }
PREV
Python 练习项目思考
NEXT
CI框架请求的处理逻辑与步骤

评论(0)

发布评论