首页 > 解决方案 > Codeigniter 4中的验证通过后为什么总是返回登录视图

问题描述

我使用 codeigniter4 验证功能对后期处理进行了调节,如下所示:

class Auth extends BaseController
{
    protected $validation;
    protected $db;
    protected $email;

    public function __construct()
    {
        date_default_timezone_set('Asia/Jakarta');
        $this->validation = \Config\Services::validation();
        $this->db = \Config\Database::connect();
        $this->email = \Config\Services::email();
    }

    function index()
    {
        $this->goToDefaultPage();
        if (isset($_POST['login'])) {
            $this->validation->setRule('nip', 'NIP', 'required|min_length[18]|max_length[18]|trim', ['required' => 'NIP tidak boleh kosong', 'min_length' => 'NIP harus 18 digit', 'max_length' => 'NIP harus 18 digit']);
            if (!$this->validation->withRequest($this->request)->run()) {
                return redirect()->to('sitkd/auth')->withInput();
                $this->validation->getError('nip');
            } else {
                $this->_login();
            }
        }
        $data = [
            'title' => 'Login | SITKD JATENG',
            'validation' => $this->validation
        ];
        echo view('sitkd/templates/auth_header', $data);
        echo view('sitkd/auth/login');
        echo view('sitkd/templates/auth_footer');
    }

    function _login()
    {
        $builder = $this->db->table('user');
        $nip = $this->request->getPost('nip');
        $password = $this->request->getPost('password');

        $user = $builder->getWhere(['nip' => $nip])->getRowArray();
        if ($user) {
            if ($user['is_active'] == 1) {
                if (password_verify($password, $user['password'])) {
                    $data = [
                        'email' => $user['email'],
                        'nip' => $user['nip'],
                        'role_id' => $user['role_id'],
                        'user_id' => $user['user_id'],
                        'permendagri_id' => $user['permendagri_id'],
                    ];
                    session()->set($data);
                    if ($user['role_id'] == 1) {
                        return redirect()->to(site_url('sitkd/admin'));
                    }
                    if ($user['role_id'] == 2) {
                        return redirect()->to(site_url('sitkd/moderator'));
                    }
                    if ($user['role_id'] == 3) {
                        return redirect()->to(site_url('sitkd/member'));
                    }
                } else {
                    session()->setFlashdata('message', '<div class="alert alert-danger" role="alert">Password/NIP tidak terdaftar</div>');
                    return redirect('sitkd/auth');
                }
            } else {
                session()->setFlashdata('message', '<div class="alert alert-danger" role="alert">Akun belum diaktifkan. Mohon hubungi admin / moderator!</div>');
                return redirect('sitkd/auth');
            }
        } else {
            session()->setFlashdata('message', '<div class="alert alert-danger" role="alert">NIP belum terdaftar. Silahkan registrasi</div>');
            return redirect('sitkd/auth');
        }
    }

    function goToDefaultPage()
    {
        if (session()->set('role_id') == 1) {
            return redirect('sitkd/admin');
        } else if (session()->set('role_id') == 2) {
            return redirect('sitkd/moderator');
        } else if (session()->set('role_id') == 3) {
            return redirect('sitkd/member');
        }
    }
}

然后这是我创建的视图:

 <?= session()->getFlashdata('message'); ?>
                            <form class="user" method="post" action="<?= base_url('sitkd/auth'); ?>">
                                <div class="form-group">
                                    <input type="text" class="auth-control auth-control-user is-invalid" id="nip" name="nip" autocomplete="off" placeholder="Masukan NIP" value="<?= old('nip'); ?>">
                                    <div class="invalid-feedback ml-3">
                                        <?= $validation->getError('nip') ?>
                                    </div>
                                </div>
                                <hr>
                                <div class="form-group">
                                    <input type="password" class="auth-control auth-control-user" id="password" autocomplete="off" name="password" placeholder="Password">
                                </div>
                                <hr>
                                <button type="submit" name="login" class="btn btn-login btn-user btn-block">
                                    Login
                                </button>
                            </form>

验证功能运行良好然后我创建的路线是这样的:

$routes->get('/sitkd/auth', 'Sitkd\Auth::index');
$routes->get('/sitkd/admin', 'Sitkd\Admin::index');

那么这是控制器以及登录成功时的方法:

    class Admin extends BaseController
{
    protected $db;

    public function __construct()
    {
        date_default_timezone_set('Asia/Jakarta');
        $this->db = \Config\Database::connect();
    }

    public function index()
    {
        echo "halo admin";
    }
}

当我在主控制器(sitkd/index)上运行索引时,一切运行顺利。但是,当一个具有管理员身份的用户成功登录时,为什么返回的视图是“登录视图”而不是“管理员视图”。帮我想想办法,怎么了?非常感谢您的帮助,谢谢。

标签: validationauthenticationpostroutescodeigniter-4

解决方案


像我一样验证代码好吧,看看我的例子


 $rules = [
            'name' => 'if_exist|required|min_length[3]|max_length[255]',
            'description' => 'required|min_length[3]|max_length[255]',
        ];

        if (!$this->validate($rules)) {
           
 $this->_login();

        }




推荐阅读