Api service login

Saya ingin membuat program berikut untuk mengambil hanya (username dan password) dari layanan api : https://service.undipa.ac.id/mhs.php?user=&pass=&api=XXXXX , sementara (level dan id_session) masih mengambil dari database mysql saya, tapi saya mengalami masalah tidak bisa login, saya tidak tahu di mana kesalahannya, kesalahan yang saya terima tidak menampilkan pesan kesalahan apa pun dan mengembalikan saya ke halaman indeks.

Ini adalah kode yang saya buat:

  1. Controller Login.php :
function index(){
    if (isset($_POST['submit'])){
        if ($this->input->post() && (strtolower($this->input->post('security_code')) == strtolower($this->session->userdata('mycaptcha')))) {

            // Fetch username and password from API
            $api_url = 'https://service.undipa.ac.id/mhs.php?user=' . urlencode($this->input->post('a', TRUE)) . '&pass=' . urlencode($this->input->post('b', TRUE)) . '&api=XXXXXX';
            $api_response = file_get_contents($api_url);
            $api_data = json_decode($api_response, true);

            if ($api_data && isset($api_data['username']) && isset($api_data['password'])) {
                $username = $api_data['username'];
                $password = $api_data['password'];
            } else {
                echo $this->session->set_flashdata('message', '<div class="alert alert-danger"><center>Invalid API response!</center></div>');
                redirect('administrator/home');
            }

            // Get level and id_session from database
            $username_from_api = $api_data['username'];
            $user_data = $this->model_app->get_user_data_by_username($username_from_api);

            if (!$user_data) {
                echo $this->session->set_flashdata('message', '<div class="alert alert-danger"><center>User not found in database!</center></div>');
                redirect('administrator/home');
            }

            // Continue with the rest of the login logic
            $password = $password;
            $cek = $this->model_app->cek_login($username, $password, 'users');
            $row = $cek->row_array();
            $total = $cek->num_rows();

            if ($total > 0){
                $this->session->set_userdata('upload_image_file_manager',true);
                $this->session->set_userdata(array('username'=>$row['username'],
                               'level'=>$user_data['level'],
                               'id_session'=>$user_data['id_session']));
                redirect('administrator/home');
            }else{
                echo $this->session->set_flashdata('message', '<div class="alert alert-danger"><center>Username dan Password Salah!!</center></div>');
                redirect('administrator/home');
            }
        }else{
            echo $this->session->set_flashdata('message', '<div class="alert alert-danger"><center>Security Code salah!</center></div>');
            redirect('administrator/home');
        }
    }else{
        if ($this->session->level!=''){
            redirect('administrator/home');
        }else{
            $this->load->helper('captcha');
            $vals = array(
                'img_path'   => './captcha/',
                'img_url'    => base_url().'captcha/',
                'font_size'     => 17,
                'img_width'  => '320',
                'img_height' => 33,
                'border' => 0, 
                'word_length'   => 5,
                'expiration' => 7200
            );

            $cap = create_captcha($vals);
            $data['image'] = $cap['image'];
            $this->session->set_userdata('mycaptcha', $cap['word']);
            $data['title'] = 'Users &rsaquo; Log In';
            $this->load->view('administrator/view_login',$data);
        }
    }
}
  1. Login view code snippet :
<div class="login-box">
  <div class="login-logo"> 
    <a href="#"><b>USERS</b> Login</a>
  </div>
  <!-- /.login-logo -->
  <div class="card">
    <div class="card-body login-card-body">
      <p class="login-box-msg">Sign in to start your session</p>
        <?php 
            echo $this->session->flashdata('message');
            echo form_open($this->uri->segment(1).'/index'); 
        ?>
        <div class="input-group mb-3">
          <input type="text" class="form-control" name='a' placeholder="Username" required>
          <div class="input-group-append">
            <div class="input-group-text">
              <span class="fas fa-envelope"></span>
            </div>
          </div>
        </div>
        <div class="input-group mb-3">
          <input type="password" class="form-control" name='b' placeholder="Password" required>
          <div class="input-group-append">
            <div class="input-group-text">
              <span class="fas fa-lock"></span>
            </div>
          </div>
        </div>
        <div class="input-group mb-3">
        <?php echo $image; ?>
        </div>
        <div class="input-group mb-3">
        <input type="text" class="form-control" name='security_code' placeholder="Security Code" required>
        </div>

        <div class="row">
          <div class="col-8">
            <div class="icheck-primary">
            <a data-dismiss="modal" aria-hidden="true" data-toggle='modal' href='#lupapass' data-target='#lupapass'>I forgot my password</a>
            </div>
          </div>
          <!-- /.col -->
          <div class="col-4">
            <button type="submit" name='submit' class="btn btn-primary btn-block">Sign In</button>
          </div>
          <!-- /.col -->
        </div>
      </form>
    </div>
    <!-- /.login-card-body -->
  </div>
</div>
  1. Function Login Cek :
public function cek_login($username, $password, $table) {
    if (!empty($username) && !empty($password)) {
        $password = $password;
        return $this->db->query("SELECT * FROM $table WHERE username='".$this->db->escape_str($username)."' AND password='".$this->db->escape_str($password)."' AND blokir='N'");
    } else {
        echo $this->session->set_flashdata('message', '<div class="alert alert-danger"><center>Invalid username or password!</center></div>');
        redirect($this->uri->segment(1) . '/index');
    }
}
  1. Function Home :
function home(){
        if ($this->session->level=='admin'){
          $this->template->load('administrator/template','administrator/include/view_home_admin');
        }else{
          $data['users'] = $this->model_app->view_where('users',array('username'=>$this->session->username))->row_array();
          $data['modul'] = $this->model_app->view_join_one('users','users_modul','id_session','id_umod','DESC');
          $this->template->load('administrator/template','administrator/include/view_home_users',$data);
        }
    }
avatar tumbalakk
@tumbalakk

1 Kontribusi 0 Poin

Diperbarui 9 bulan yang lalu

1 Jawaban:

Dalam kode yang Anda berikan, Anda mencoba untuk mengambil data (username dan password) dari layanan API dan kemudian melakukan verifikasi login dengan mengambil (level dan id_session) dari database MySQL Anda. Jika Anda mengalami masalah dengan login, ada beberapa langkah yang dapat Anda ambil untuk mencari tahu apa yang salah:

  1. Periksa Koneksi ke API: Pastikan bahwa Anda dapat mengakses dan mendapatkan respons dari layanan API di URL &#039;https://service.undipa.ac.id/mhs.php?user=&#039; . urlencode($this-&gt;input-&gt;post(&#039;a&#039;, TRUE)) . &#039;&amp;pass=&#039; . urlencode($this-&gt;input-&gt;post(&#039;b&#039;, TRUE)) . &#039;&amp;api=XXXXXX&#039;. Coba buka URL tersebut di peramban Anda atau gunakan alat pengembangan web untuk menguji koneksi ke API.

  2. Periksa Respons API: Setelah mendapatkan respons dari API menggunakan file_get_contents, pastikan respons tersebut sesuai dengan yang Anda harapkan. Anda dapat mencetaknya menggunakan var_dump($api_response) untuk melihat apa yang Anda terima dari API.

  3. Periksa Data dari API: Pastikan bahwa setelah Anda mendecode respons JSON dari API menggunakan json_decode, data username dan password tersedia dan sesuai dengan format yang diharapkan. Anda dapat mencetaknya menggunakan var_dump($api_data).

  4. Periksa Kode Login: Pastikan bahwa bagian login Anda, terutama dalam fungsi cek_login, berfungsi dengan baik. Pastikan variabel username dan password yang digunakan untuk mencari pengguna di database telah diisi dengan benar.

  5. Cek Kesalahan pada Database: Pastikan bahwa tabel dan kolom yang Anda gunakan dalam kueri database (&#039;users&#039;, &#039;username&#039;, &#039;password&#039;, dll.) sesuai dengan struktur database Anda.

  6. Cek Pesan Kesalahan: Anda dapat mencetak pesan kesalahan selama proses debug untuk melihat apakah ada kesalahan tertentu yang terjadi selama proses login.

Dengan melakukan langkah-langkah di atas, Anda dapat mengidentifikasi masalah potensial dalam proses login Anda dan mencari tahu cara memperbaikinya. Pastikan juga bahwa Anda telah menyamarkan informasi sensitif seperti API key (&#039;XXXXXX&#039;) sebelum berbagi kode Anda secara publik.

avatar adamajalah27
@adamajalah27

119 Kontribusi 40 Poin

Dipost 9 bulan yang lalu

Login untuk ikut Jawaban