【发布时间】:2020-08-26 05:58:31
【问题描述】:
我已经用谷歌搜索了这个,但没有得到任何适合我的场景的东西所以,我发布了我的问题。我正在使用 CodeIgniter MVC 框架进行管理员登录,我已经为我的所有管理员控制器编写了一个名为“Admin_Controller”的基本控制器,它们从“Admin_Controller”扩展而来我已经在“Admin_Controller”的基本控制器中编写了登录会话检查但它不能正常工作说“本地主机重定向你太多次。”
文件夹结构:
--controllers
--admin/
-- Banners.php
-- Categories.php
-------
-------
-- Login.php
--models
-- admin
-- Mdl_banners.php
-- Mdl_categories.php
------------
--------------
--views
--admin
-------
-------
登录表单:admin/login/login_View.php
<form action="<?php echo base_url(); ?>admin/login/validate_user" method="post" name="login_form">
<h1>Login</h1>
<?php
echo "<div class='error_msg'>";
if (isset($error_message)) {
echo $error_message;
}
echo validation_errors();
echo "</div>";
?>
<div>
<input type="text" name="user_name" class="form-control" placeholder="UserName" required="" />
</div>
<div>
<input type="password" name="user_password" class="form-control" placeholder="Password" required="" />
</div>
<div>
<button class="btn btn-default submit" name="submit_login">Login</button>
</div>
</form>
我的基本控制器:core/MY_Controller.php
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
// modules::run('admin/login/isUserLoggedin');
}
}
class Admin_Controller extends MY_Controller {
public function __construct()
{
parent::__construct();
$this->_title = 'My Site Name';
// check if user is logged in
if (! $this->session->userdata('logged_in')) {
redirect('admin/login');
}
}
}
我的登录控制器:Controllers/admin/Login.php
class Login extends Admin_Controller {
public function __construct(){
parent::__construct();
$this->load->model('admin/mdl_login');
}
public function index(){
if ($this->session->userdata('logged_in'))
redirect(base_url('admin/dashboard'));
$data['title'] = $this->_title . ' - Admin Login';
$this->load->view('admin/login/login_view');
}
public function validate_user(){
$this->form_validation->set_rules('user_name', 'Username', 'trim|required|xss_clean');
$this->form_validation->set_rules('user_password', 'Password', 'trim|required|xss_clean');
if ($this->form_validation->run() == FALSE) {
$this->load->view('login_view');
} else {
$data = array(
'username' => $this->input->post('user_name'),
'password' => md5($this->input->post('user_password'))
);
$result = $this->mdl_login->login($data);
if ($result == TRUE) {
$user_name = $this->input->post('user_name');
$result = $this->mdl_login->read_user_information($user_name);
if ($result != false) {
$session_data = array(
'user_id' => $result[0]->id,
'user_name' => $result[0]->username,
'email' => $result[0]->email,
);
// Add user data in session
$this->session->set_userdata('logged_in', $session_data);
redirect('admin/dashboard');
}
} else {
$data = array(
'error_message' => 'Invalid Username or Password'
);
$this->load->view('admin/login/login_view', $data);
}
}
}
}
htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
我的问题是它显示为“localhost 将您重定向了太多次。” 我怀疑在 'admin' 文件夹中的 'Login' 控制器是否有任何问题控制器?有人指出我正确的方向吗?谢谢。
【问题讨论】:
-
这是因为循环,请重新格式化您的代码,使其值得阅读和挖掘。您在哪里显示登录表单?表单将提交给
validate_user -
我已经用登录表单更新了我的问题,请检查一次@Adi Prasetyo
-
除了这个 q,你应该使用 PHP password-hashing API 而不是 md5。你能在重定向循环之前看到表单吗?
-
不,我看不到登录表单,如果我访问
http://localhost/site_name/admin/login,则会显示错误为localhost redirected you too many times. -
而不是重定向尝试加载视图
标签: php codeigniter authentication codeigniter-3