ikhsan3adi / absensi-sekolah-qr-code

Sistem absensi siswa dan guru berbasis QR Code menggunakan CodeIgniter 4 🔥
https://youtube.com/watch?v=E1ho6wRBIUs
GNU General Public License v3.0
222 stars 75 forks source link

Cannot Acces Camer #82

Closed Eri31-lgtm closed 2 months ago

Eri31-lgtm commented 3 months ago

Saya mencoba merubah alamat localhost agar bisa di akses oleh perangkat lain dengan jaringan yang sama, dan berhasil tetapi kendala baru muncul yaitu camera tidak bisa di akses

image

ikhsan3adi commented 3 months ago

Coba klik di tulisan Not secure disebelah kiri url nanti ada tombol untuk mengatur permission kamera

Eri31-lgtm commented 3 months ago

image

tidak ada untuk mengatur permission kamera mas, itu di blok tidak dapat di klik di beberapa perangkat yang berbeda pun sama

ikhsan3adi commented 3 months ago

Permissionnya diblok karena menggunakan http, bukan localhost, dan bukan https. Ini caranya

https://medium.com/@Carmichaelize/enabling-the-microphone-camera-in-chrome-for-local-unsecure-origins-9c90c3149339

Eri31-lgtm commented 3 months ago

Permissionnya diblok karena menggunakan http, bukan localhost, dan bukan https. Ini caranya

https://medium.com/@Carmichaelize/enabling-the-microphone-camera-in-chrome-for-local-unsecure-origins-9c90c3149339

itu klo msalnya mau mnggnakn https bisa ?

ikhsan3adi commented 3 months ago

Nggak perlu https, tinggal di setting aja browsernya, tapi kalau mau https harus di hosting dulu.

Eri31-lgtm commented 3 months ago

Nggak perlu https, tinggal di setting aja browsernya, tapi kalau mau https harus di hosting dulu.

Oke baik mas, brrti yang di setting browsernya ckup perangkat yang di jadikan server saja ya ?

ikhsan3adi commented 3 months ago

Betul

Eri31-lgtm commented 3 months ago

Betul

Trmksih bnyak mas, bner" Sya di bmbing trus. Sehat selalu

ikhsan3adi commented 3 months ago

Sama sama

janglapuk commented 3 months ago

Jika menggunakan Chrome, bisa atur flag Insecure origins treated as secure untuk mengizinkan URL yang tercantum dianggap aman.

Caranya, akses chrome://flags/#unsafely-treat-insecure-origin-as-secure di Chrome, lalu tambahkan URL-nya dan ubah status menjadi Enabled. Chrome akan meminta relaunch untuk efek perubahannya.

image

Semoga dapat membantu.

Referensi:

Eri31-lgtm commented 3 months ago

Jika menggunakan Chrome, bisa atur flag Insecure origins treated as secure untuk mengizinkan URL yang tercantum dianggap aman.

Caranya, akses chrome://flags/#unsafely-treat-insecure-origin-as-secure di Chrome, lalu tambahkan URL-nya dan ubah status menjadi Enabled. Chrome akan meminta relaunch untuk efek perubahannya.

image

Semoga dapat membantu.

Referensi:

Di dalam kolomnya di isi apa ?

janglapuk commented 3 months ago

Jika menggunakan Chrome, bisa atur flag Insecure origins treated as secure untuk mengizinkan URL yang tercantum dianggap aman. Caranya, akses chrome://flags/#unsafely-treat-insecure-origin-as-secure di Chrome, lalu tambahkan URL-nya dan ubah status menjadi Enabled. Chrome akan meminta relaunch untuk efek perubahannya. image Semoga dapat membantu. Referensi:

Di dalam kolomnya di isi apa ?

URL yang ingin diatur agar browser menganggap sebagai URL yang secure. Secara default, browser mewajibkan permintaan akses ke kamera hanya dapat diakses melalui protokol aman HTTPS (secure origin). Dengan pengaturan itu, browser akan meniadakan pembatasan tersebut hanya pada URL yang tercantum saja.

Contoh isian URL: image

Eri31-lgtm commented 3 months ago

Jika menggunakan Chrome, bisa atur flag Insecure origins treated as secure untuk mengizinkan URL yang tercantum dianggap aman. Caranya, akses chrome://flags/#unsafely-treat-insecure-origin-as-secure di Chrome, lalu tambahkan URL-nya dan ubah status menjadi Enabled. Chrome akan meminta relaunch untuk efek perubahannya. image Semoga dapat membantu. Referensi:

Di dalam kolomnya di isi apa ?

URL yang ingin diatur agar browser menganggap sebagai URL yang secure. Secara default, browser mewajibkan permintaan akses ke kamera hanya dapat diakses melalui protokol aman HTTPS (secure origin). Dengan pengaturan itu, browser akan meniadakan pembatasan tersebut hanya pada URL yang tercantum saja.

Contoh isian URL: image

Baik terimkasih. Saya akan coba lagi

Eri31-lgtm commented 3 months ago

Jika menggunakan Chrome, bisa atur flag Insecure origins treated as secure untuk mengizinkan URL yang tercantum dianggap aman. Caranya, akses chrome://flags/#unsafely-treat-insecure-origin-as-secure di Chrome, lalu tambahkan URL-nya dan ubah status menjadi Enabled. Chrome akan meminta relaunch untuk efek perubahannya. image Semoga dapat membantu. Referensi:

Di dalam kolomnya di isi apa ?

URL yang ingin diatur agar browser menganggap sebagai URL yang secure. Secara default, browser mewajibkan permintaan akses ke kamera hanya dapat diakses melalui protokol aman HTTPS (secure origin). Dengan pengaturan itu, browser akan meniadakan pembatasan tersebut hanya pada URL yang tercantum saja.

Contoh isian URL: image

Saya sudah mencoba. Saya setting di perangkat server dan perangkat yang lain

Sudah bisa, namun kamera terkunci sudah allow juga

Eri31-lgtm commented 3 months ago

![Uploading 17200128715168314967444278973944.jpg…]()

Eri31-lgtm commented 3 months ago

![Uploading 17200129723866778814242164504827.jpg…]()

guritnodutiska commented 3 months ago

Kalau di generate qr code muncul seperti ini apakah yaang perlu diperbaiki apa kak? qrcode

ikhsan3adi commented 3 months ago

Kalau di generate qr code muncul seperti ini apakah yaang perlu diperbaiki apa kak?

Coba lihat #75

guritnodutiska commented 3 months ago
{
    "title": "ErrorException",
    "type": "ErrorException",
    "code": 500,
    "message": "mkdir(): No such file or directory",
    "file": "/home/u1343118/public_html/presensi/app/Controllers/Admin/QRGenerator.php",
    "line": 37,
    "trace": [
        {
            "function": "errorHandler",
            "class": "CodeIgniter\\Debug\\Exceptions",
            "type": "->"
        },
        {
            "file": "/home/u1343118/public_html/presensi/app/Controllers/Admin/QRGenerator.php",
            "line": 37,
            "function": "mkdir"
        },
        {
            "file": "/home/u1343118/public_html/presensi/vendor/codeigniter4/framework/system/CodeIgniter.php",
            "line": 903,
            "function": "__construct",
            "class": "App\\Controllers\\Admin\\QRGenerator",
            "type": "->"
        },
        {
            "file": "/home/u1343118/public_html/presensi/vendor/codeigniter4/framework/system/CodeIgniter.php",
            "line": 500,
            "function": "createController",
            "class": "CodeIgniter\\CodeIgniter",
            "type": "->"
        },
        {
            "file": "/home/u1343118/public_html/presensi/vendor/codeigniter4/framework/system/CodeIgniter.php",
            "line": 355,
            "function": "handleRequest",
            "class": "CodeIgniter\\CodeIgniter",
            "type": "->"
        },
        {
            "file": "/home/u1343118/public_html/presensi/vendor/codeigniter4/framework/system/Boot.php",
            "line": 312,
            "function": "run",
            "class": "CodeIgniter\\CodeIgniter",
            "type": "->"
        },
        {
            "file": "/home/u1343118/public_html/presensi/vendor/codeigniter4/framework/system/Boot.php",
            "line": 67,
            "function": "runCodeIgniter",
            "class": "CodeIgniter\\Boot",
            "type": "::"
        },
        {
            "file": "/home/u1343118/public_html/presensi/index.php",
            "line": 56,
            "function": "bootWeb",
            "class": "CodeIgniter\\Boot",
            "type": "::"
        }
    ]
}
janglapuk commented 3 months ago

Kalau di generate qr code muncul seperti ini apakah yaang perlu diperbaiki apa kak? qrcode

Sudah coba ubah permission direktori public/uploads ke 777?

Update: Gagal karena sempat ganti folder public ke boot kan? Lihat komentar sebelumnya: https://github.com/ikhsan3adi/absensi-sekolah-qr-code/issues/83#issuecomment-2206135427

guritnodutiska commented 3 months ago

Ok, saya coba kak

janglapuk commented 3 months ago

Pastikan baris ini juga disesuaikan:

https://github.com/ikhsan3adi/absensi-sekolah-qr-code/blob/ba2a6eec30182a0045500132d2a65432002059ce/app/Controllers/Admin/QRGenerator.php#L32

guritnodutiska commented 3 months ago

Tetap sama itu kak

guritnodutiska commented 3 months ago
{
    "title": "ErrorException",
    "type": "ErrorException",
    "code": 500,
    "message": "mkdir(): No such file or directory",
    "file": "/home/u1343118/public_html/presensi/app/Controllers/Admin/QRGenerator.php",
    "line": 37
}
guritnodutiska commented 3 months ago

adakah yang salah dengan script nya. Saya ganti folder public menjadi boot

guritnodutiska commented 3 months ago
<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;

use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
use Endroid\QrCode\Label\Font\Font;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;

class QRGenerator extends BaseController
{
   protected QrCode $qrCode;
   protected PngWriter $writer;
   protected Logo $logo;
   protected Label $label;
   protected Font $labelFont;
   protected Color $foregroundColor;
   protected Color $foregroundColor2;
   protected Color $backgroundColor;

   protected string $relativePath;
   protected string $qrCodeFilePath;

   public function __construct()
   {
      $this->relativePath = __DIR__ . '../../../../';
      $this->qrCodeFilePath = 'boot/uploads/';

      if (!file_exists($this->relativePath . $this->qrCodeFilePath)) {
         mkdir($this->relativePath . $this->qrCodeFilePath);
      }

      $this->writer = new PngWriter();

      $this->labelFont = new Font($this->relativePath . 'boot/assets/fonts/Roboto-Medium.ttf', 14);

      $this->foregroundColor = new Color(44, 73, 162);
      $this->foregroundColor2 = new Color(28, 101, 90);
      $this->backgroundColor = new Color(255, 255, 255);

      // Create logo
      $this->logo = Logo::create(base_url('boot/assets/img/logo_sekolah.jpg'))->setResizeToWidth(75);

      $this->label = Label::create('')
         ->setFont($this->labelFont)
         ->setTextColor($this->foregroundColor);

      // Create QR code
      $this->qrCode = QrCode::create('')
         ->setEncoding(new Encoding('UTF-8'))
         ->setErrorCorrectionLevel(new ErrorCorrectionLevelHigh())
         ->setSize(300)
         ->setMargin(10)
         ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
         ->setForegroundColor($this->foregroundColor)
         ->setBackgroundColor($this->backgroundColor);
   }

   public function generateQrSiswa()
   {
      $kelas = url_title($this->request->getVar('kelas'), '-', true);

      $this->qrCodeFilePath .= 'qr-siswa/' . $kelas . '/';

      if (!file_exists($this->relativePath . $this->qrCodeFilePath)) {
         mkdir($this->relativePath . $this->qrCodeFilePath, recursive: true);
      }

      $this->generate(
         unique_code: $this->request->getVar('unique_code'),
         nama: $this->request->getVar('nama'),
         nomor: $this->request->getVar('nomor')
      );

      return $this->response->setJSON(true);
   }

   public function generateQrGuru()
   {
      $this->qrCode->setForegroundColor($this->foregroundColor2);
      $this->label->setTextColor($this->foregroundColor2);

      $this->qrCodeFilePath .= 'qr-guru/';

      if (!file_exists($this->relativePath . $this->qrCodeFilePath)) {
         mkdir($this->relativePath . $this->qrCodeFilePath);
      }

      $this->generate(
         unique_code: $this->request->getVar('unique_code'),
         nama: $this->request->getVar('nama'),
         nomor: $this->request->getVar('nomor')
      );

      return $this->response->setJSON(true);
   }

   protected function generate($nama, $nomor, $unique_code)
   {
      $filename = url_title($nama, separator: '-', lowercase: true) . "_" . url_title($nomor, separator: '-', lowercase: true) . '.png';

      // set qr code data
      $this->qrCode->setData($unique_code);

      $this->label->setText($nama);

      // Save it to a file
      $this->writer
         ->write(qrCode: $this->qrCode, logo: $this->logo, label: $this->label)
         ->saveToFile(path: $this->relativePath . $this->qrCodeFilePath . $filename);
   }
}
janglapuk commented 3 months ago

Sebelum posting kode, tolong diikuti dulu standar penulisan kode di GitHub, supaya lebih rapi dan gampang dibaca. Lihat caranya di sini:

https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code


Kembali ke masalahnya.

Manfaatkan fitur debugging dengan Debugbar, dengan mengaktifkan mode development di file .env selama ketemu masalah aplikasi:

CI_ENVIRONMENT = development
# CI_ENVIRONMENT = production

Terus, coba sisipkan fungsi dd() (diikuti variable tertentu yang ingin dilihat nilainya) sebelum fungsi yang memicu error, contohnya:

if (!file_exists($this->relativePath . $this->qrCodeFilePath)) {
   dd($this->relativePath . $this->qrCodeFilePath); // <<< sisipkan di sini
   mkdir($this->relativePath . $this->qrCodeFilePath, recursive: true);
}

Terus coba akses kembali halamannya dan lihat output debug-nya. Silakan posting kembali.

Update: Supaya ketahuan absolute path yang dihasilkan, coba debug menggunakan realpath():

if (!file_exists($this->relativePath . $this->qrCodeFilePath)) {
   dd(realpath($this->relativePath . $this->qrCodeFilePath)); // <<< sisipkan di sini
   mkdir($this->relativePath . $this->qrCodeFilePath, recursive: true);
}

Saya mencurigai relative path ini terlalu offside:

$this->relativePath = __DIR__ . '../../../../';
ikhsan3adi commented 3 months ago

Nah betul kata @janglapuk Coba dump path-nya menggunakan dd()

guritnodutiska commented 3 months ago

tpi kalau offline bisa, ini progressbar jalan tpi qr code tidak ada di folder uploads

guritnodutiska commented 3 months ago

kalau per siswa/guru bisa muncul qrcode nya, tpi kalau per kelas membuat folder per kelas tidak bisa

janglapuk commented 3 months ago
$this->relativePath = __DIR__ . '../../../../';

Koreksi lagi bagian ini:

$this->relativePath = __DIR__ . '../../../../';

Menjadi:

$this->relativePath = __DIR__ . '/../../../../';

(Setelah __DIR__ diikuti / dulu)

Sesuaikan kalau terlalu offside, jadi:

$this->relativePath = __DIR__ . '/../../../';
guritnodutiska commented 3 months ago

folder

Kalau seperti ini menjadi berapa subfolder kak. jadi scriptnya?

janglapuk commented 3 months ago

Kalau seperti ini menjadi berapa subfolder kak. jadi scriptnya?

Memang seperti itu adanya

image

guritnodutiska commented 3 months ago

tidak kak misalnya saya generete saya pilih per kelas kalau normal qrcode akan membentuk folder kelas dan isian qrcodenya tpi ini tidak muncul hasil qrcodenya. Tapi kalau generate guru yang saya input 1 guru bisa muncul

guritnodutiska commented 3 months ago

maaf qr codenya guru juga tidak tampil kak, tapi tidak muncul pesan error di consule

guritnodutiska commented 3 months ago

Saya mencurigai relative path ini terlalu offside:

$this->relativePath = DIR . '../../../../';

kayaknya penempatan foldernya offside kak. Makanya pasnya berapa ya kak kalau saya naruh foldernya kayak image diatas? maksudnya ini relativePath = DIR . '../../../../'; yang benar gimana?

janglapuk commented 3 months ago

Sebaiknya coba debug dulu, lihat di komentar saya: https://github.com/ikhsan3adi/absensi-sekolah-qr-code/issues/82#issuecomment-2208928449 Lihat apakah real path-nya sudah sesuai dengan direktori aslinya.

Dan koreksi penulisan relative path: https://github.com/ikhsan3adi/absensi-sekolah-qr-code/issues/82#issuecomment-2208971569

Saran saya, usahakan tidak mengubah direktori yang sudah diatur developer, misal dari public menjadi boot kalau tidak ada urgensinya, kalaupun perlu ya harus mau repot-repot untuk memperbaikinya. Karena (mungkin saja) masih ada kode-kode lainnya yang masih merujuk ke folder public secara hardcoded. Koreksi kalau saya salah @ikhsan3adi.

Dan terakhir, coba pakai versi ter-update v1.5.7.

guritnodutiska commented 3 months ago

kenapa saya ganti folder boot kak, karena saya main pakai sub folder, kemarin nama folder public crash dengan domain yang lain. Terima kasih

ikhsan3adi commented 3 months ago

Saya baru sadar kode yang diberikan masnya versi lama yang mana masih menggunakan relative path __DIR__, saat ini qr generatornya sudah menggunakan ROOTPATH/public/.....

Perubahannya bisa dilihat di commit di bawah

https://github.com/ikhsan3adi/absensi-sekolah-qr-code/commit/049487d8f0037f1a5987e38dc8b2b75816814b24

https://github.com/ikhsan3adi/absensi-sekolah-qr-code/commit/5e44882abddba2516fd967077c1445d1d6f24e57

Saya sarankan timpa saja QRGenerator.php dengan yang versi baru

Eri31-lgtm commented 3 months ago

kenapa saya ganti folder boot kak, karena saya main pakai sub folder, kemarin nama folder public crash dengan domain yang lain. Terima kasih

coba pakai kode ini untuk generate qr nya, saya sudah coba dan fixed https://github.com/ikhsan3adi/absensi-sekolah-qr-code/commit/5e44882abddba2516fd967077c1445d1d6f24e57