validation - 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)上运行索引时,一切运行顺利。但是,当一个具有管理员身份的用户成功登录时,为什么返回的视图是“登录视图”而不是“管理员视图”。帮我想想办法,怎么了?非常感谢您的帮助,谢谢。
解决方案
像我一样验证代码好吧,看看我的例子
$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();
}
推荐阅读
- xcode - iphone is busy:等待设备,iphone完成后xcode将继续
- oauth-2.0 - cognito oauth2 auth code grant 提供访问令牌,但我需要身份令牌
- amazon-s3 - 如何使用带有访问密钥的 multipartFormData 使用 alamofire 4.8 将文件上传到 S3?
- node.js - 在没有 CLI 的情况下转换 Typescript
- iis - ASP.NET Core 2.2 (release) 产生错误并停止 w3wp
- hyperledger-composer - 命令“作曲家卡导入”返回“总线错误”
- python - 烧瓶超级教程,如何自动设置 size=32 以随窗口大小而变化
- python - Scrapy:如何获取两个正则表达式之间的所有字符串
- c# - C# 任务聚合
- javascript - Javascript刽子手:用正确的字母替换空白的麻烦