2015-04-24 14 views
6

Sto provando a creare un semplice sistema di login in codeigniter. Quando clicco sul mio pulsante di accesso ho un errore:L'azione richiesta non è consentita. Codigniter

The action you have requested is not allowed.

Quando apro la mia console vedo questo:

POST http://localhost/PHP/PROJECT/CodeIgniter/ 403 (Forbidden)

Questa è la mia opinione:

<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> 

Questo è il mio modello:

<?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(); 
    } 
} 

e questo è il mio 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"); 
    } 
} 

Qualcuno sa come risolvere questo problema?

Grazie!

+0

la sua non è una buona pratica di avere un pulsante di pulsante di tipo in un modulo. Prova con il tipo di pulsante submit o intput type invia –

risposta

9

Controlla la tua config.php Se,

$config['csrf_protection'] = TRUE; 

Se è impostata su true è necessario utilizzare form_open(), questo sarà automaticamente appendere l'ci_csrf_token. Altrimenti puoi semplicemente impostare su FALSE.

Ma è consigliabile impostarlo su TRUE. Ma è necessario assicurarsi che tutte le richieste includano lo ci_csrf_token compresa la richiesta AJAX.

https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html

+1

Grazie per l'aiuto! Ha funzionato. –

9

Prova questa

<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>"> 
+2

+1 oltre alla ** risposta selezionata ** questa è anche una soluzione pratica se lo sviluppatore non usa 'form_open()' – Adnan

-1

Con me è stato cache del browser, una volta che riesce, la forma ha iniziato a lavorare di nuovo.

0

per me il problema era che ero il caricamento della pagina dell'indice, ho cambiato come segue e ha funzionato:

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'); 
}