I'm trying to make a simple login system in codeigniter. When I click on my button login I get an error:
我正在尝试在codeigniter中创建一个简单的登录系统。当我点击我的按钮登录时,我收到一个错误:
The action you have requested is not allowed.
您所请求的操作是不允许的。
When I open my console I see this:
当我打开我的控制台时,我看到了这个:
POST
http://localhost/PHP/PROJECT/CodeIgniter/
403 (Forbidden)POST http:// localhost / PHP / PROJECT / CodeIgniter / 403(Forbidden)
This is my view:
这是我的看法:
<body>
<h1>LOG IN!</h1>
<form action="" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username" >
<label for="password">Password</label>
<input type="password" id="password" name="password" >
<br>
<button id="btn_login" name="btn_login" >LOG IN!</button>
</form>
<div class="errors" ><?php echo validation_errors(); ?></div>
</body>
This is my model:
这是我的模特:
<?php
class User_model extends CI_Model {
public $m_sUsername;
public $m_sPassword;
public $m_sEmail;
public $m_sPicture;
function __construct()
{
parent::__construct();
}
function get_user($username, $password)
{
$this->db->select("username","password");
$this->db->from(user);
$this->db->where('username',$username);
$this->db->where('password',$password);
$this->db->limit(1);
$query = $this->db->get();
return $query->num_rows();
}
}
and this is my controller:
这是我的控制者:
<?php
class Login extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->helper('form');
$this->load->helper('url');
$this->load->helper('html');
$this->load->database();
$this->load->library('form_validation');
$this->load->model("User_model", "", true);
}
public function index()
{
if ($this->input->server('REQUEST_METHOD') == 'POST') {
$username = $this->input->post("username");
$password = $this->input->post("password");
$this->form_validation->set_rules("username", "Username", "trim|required");
$this->form_validation->set_rules("password", "Password", "trim|required");
if ($this->form_validation->run() == FALSE) {
//validation fails
echo "Vul alle velden in";
} else {
//validation succeeds
if ($this->input->post('btn_login') == "Login") {
//check if username and password is correct
$usr_result = $this->User_model->get_user($username, $password);
if ($usr_result > 0) { //active user record is present
echo 'Ingelogd!';
} else {
echo "Wrong!";
}
}
}
}
$this->load->view("admin/login_view.php");
}
}
Does anyone know how to solve this problem?
有谁知道如何解决这个问题?
Thanks!
谢谢!
4 个解决方案
#1
9
Check your config.php
If,
检查你的config.php如果,
$config['csrf_protection'] = TRUE;
If it is set to true you need to use form_open()
, this will auto append the ci_csrf_token
. Otherwise you can just set to FALSE
.
如果设置为true,则需要使用form_open(),这将自动附加ci_csrf_token。否则你可以设置为FALSE。
But its advisable to set it to TRUE
. But you need to make sure all your request includes the ci_csrf_token
including AJAX request.
但建议将其设置为TRUE。但是您需要确保所有请求都包含ci_csrf_token,包括AJAX请求。
https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html
https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html
#2
9
Try this
尝试这个
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
#3
0
With me it was browser cache, once I cleared it, the form started working again.
在我看来它是浏览器缓存,一旦我清除它,表单就开始重新运行了。
#4
0
for me the problem was that I was loading the page in index, I changed as follow and it worked:
对我来说问题是我在索引中加载页面,我改变如下,它工作:
public function index()
{
// Load Login Page
redirect('login/login_page','refresh');
}
public function login_page()
{
$data['title'] = 'Login Page';
$this->load->view('templates/header', $data);
$this->load->view('users/login_view', $data);
$this->load->view('templates/footer');
}
#1
9
Check your config.php
If,
检查你的config.php如果,
$config['csrf_protection'] = TRUE;
If it is set to true you need to use form_open()
, this will auto append the ci_csrf_token
. Otherwise you can just set to FALSE
.
如果设置为true,则需要使用form_open(),这将自动附加ci_csrf_token。否则你可以设置为FALSE。
But its advisable to set it to TRUE
. But you need to make sure all your request includes the ci_csrf_token
including AJAX request.
但建议将其设置为TRUE。但是您需要确保所有请求都包含ci_csrf_token,包括AJAX请求。
https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html
https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html
#2
9
Try this
尝试这个
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">
#3
0
With me it was browser cache, once I cleared it, the form started working again.
在我看来它是浏览器缓存,一旦我清除它,表单就开始重新运行了。
#4
0
for me the problem was that I was loading the page in index, I changed as follow and it worked:
对我来说问题是我在索引中加载页面,我改变如下,它工作:
public function index()
{
// Load Login Page
redirect('login/login_page','refresh');
}
public function login_page()
{
$data['title'] = 'Login Page';
$this->load->view('templates/header', $data);
$this->load->view('users/login_view', $data);
$this->load->view('templates/footer');
}