Kerjalah Dijam Kerja Dan Jangan Kerja Dijam Kerja

Terkadang kurang tidur adalah termasuk masalah para pekerja yg kerja di perusahaan software house, Termasuk saya juga sebenarnya. kenapa kurang tidur? Bisa jadi hanya karena ada kerjaan yg kelupaan saat dikantor, apa yg terjadi biasanya adalah membuka kembali kerjaan tersebut dan menyelesaikan nya, atau mungkin ada kendala saat pengerjaan project, seperti case² yg belum pernah dihadapi dan akhirnya mencoba untuk research lebih jauh tentang itu. Kalau bisa, hal-hal seperti ini jauh dari kita. Uda paling mantap harusnya jika kita bekerja maksimal dikantor dari pada harus membawanya pulang kerumah. Kerugian yg kita hadapi sudah jelas jika seperti itu. Kita tidak ada waktu untuk keluarga, jam tidur semakin minim karena besok harus pagi masuk kekantor. Akhirnya mulai muncul lah pemikiran yg sadis, yaitu membantai diri sendiri dengan meminum kopi X. Kenapa kopi X? Karena dia bisa buat mata kita gk ngantuk. Mungkin terlihat aneh, tapi efek nya jelas, mata tidak ngantuk saat kerja, gairah muncul 1/1, namun sebenarnya. Badan kita sudah minta istirahat. Bukankah hal ini adalah rutinitas yg tidak baik untuk kesehatan kita di masa umur mendatang. Saran saya, mending kerjaan dikantor dimaksimalkan, sehingga tidak ada pembantaian terhadap diri sendiri disini. Jangan lupa untuk minum air putih dan berdiri setiap satu jam sekali. Saya sengaja menulis ini, karena saya juga sedang berusaha untuk tidak seperti itu. Karena jika rutinitas tidak baik terus dikerjakan, akan mengakibatkan fatal terhadap kebiasaan kita dimasa tua.
Read More

Autentikasi dengan Laravel Sanctum & Fortify untuk SPA

Kita sama - sama tau, begitu banyak first party package untuk melakukan autentikasi, seperti [breeze](https://github.com/laravel/breeze), [ui](https://github.com/laravel/ui), [jetstream](https://jetstream.laravel.com/2.x/introduction.html). Nah jetstream sendiri juga menggunakan fortify sebagai api auth nya, namun, jika kita tidak ingin menggunakan jetstream melainkan ingin memakai [fortify](https://github.com/laravel/fortify) nya saja juga bisa, terlebih lagi, kita bisa turn off view nya yang by default bisa kita tentukan dalam `AppServiceProvider`, kali ini saya akan menganggap bahwa Anda ingin memakai fortify sebagai api saja, dan untuk view auth nya menggunakan spa yang telah Anda punya. Pertama sekali, silahkan install laravel nya dengan composer ataupun laravel command cli yang telah di install di machine Anda. ``` laravel new fortify-api ``` Setelah itu, silahakan masuk kedalam folder `fortify-api`, kemudian install fortify nya dengan cara seperti ini. ``` fortify-api > composer require laravel/fortify ``` Jika sudah, langsung aja publish vendor dari fortify tersebut dengan artisan command ``` fortify-api > php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider" ``` Jika sudah, silahkan masukkan sanctum middleware nya kedalam `app/Http/Kernel.php` tepat pada `api` key. ```php 'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ``` Setelah itu, pastikan `FortifyServiceProvider` telah terdaftar di `config/app.php`, karena jika tidak, dia tidak akan dikenali. Buka `config/app.php` ``` /* * Application Service Providers... */ App\Providers\FortifyServiceProvider::class, ``` Setelah itu, silahkan buat satu seeder untuk user dengan artisan command seperti berikut. ``` fortify-api > php artisan make:seed UserSeeder ``` Silahkan buka filenya tepat pada `database/seeders/UserSeeder.php` dan masukkan satu user saja tepat pada `run` method seperti berikut. ```php public function run() { DB::table('users')->insert([ 'name' => 'Irsyad A. Panjaitan', 'email' => 'irsyad@parsinta.com', 'email_verified_at' => null, 'password' => bcrypt('password'), ]); } ``` Setelah itu, pastikan Anda sudah setup database sesuai dengan konfigurasi yang Anda punya, buka file `.env`. ```php DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=fortify_api DB_USERNAME=root DB_PASSWORD= ``` Jika sudah, maka kita bisa lanjut untuk melakukan migrate sekalian memasukkan seedernya dengan cara. ``` fortify-api > php artisan migrate --seed ``` Lanjut, buka kembali `.env` file, dan setup sanctum dan juga mailnya. ```php # Sanctum SANCTUM_STATEFUL_DOMAINS=localhost:3000 SPA_URL=http://localhost:3000 SESSION_DOMAIN=localhost # Mail MAIL_FROM_ADDRESS=noreply@domain.com ``` Silahkan sesuaikan port SPA yang Anda punyai dengan url yang ada di atas. Disini saya menganggap Anda menggunakan react, jadi saya berasumsi portnya `3000`, jika Anda menggunakan vue, itu seharusnya `8080` jika tidak di modifikasi. Lanjut, silahkan buka file konfig untuk cors yang by default sudah diberi sewaktu kita install laravel `config/cors.php` ```php 'paths' => [ 'api/*', 'login', 'logout', 'register', 'user/password', 'forgot-password', 'reset-password', 'sanctum/csrf-cookie', 'user/profile-information', 'email/verification-notification', ], ``` Masih tetap di file yang sama, silahkan scroll kebawah dan pastikan `supports_credentials` nya turn on seperti berikut. ```php 'supports_credentials' => true, ``` Nah, sekarang waktunya kita setup fortify itu sendiri yang ada di `config/fortify.php`. Untuk default redirect nya kita akan masukkan url spa kita yang sudah setup didalam `.env` tadi seperti berikut. ```php 'home' => env('SPA_URL') . '/dashboard', ``` Jangan lupa, karena view auth nya kita ingin dari SPA, maka kita akan turn off view nya seperti berikut. ```php 'views' => false, ``` Selanjutnya, silahkan uncomment fitur yang ingin Anda pakai di fortify itu sendiri. ```php 'features' => [ Features::registration(), Features::resetPasswords(), Features::emailVerification(), Features::updateProfileInformation(), Features::updatePasswords(), ], ``` Jika sudah, kita bisa lanjut untuk edit file middleware `RedirectIfAuthenticated` yang ada di `app/Http/Middleware/RedirectIfAuthenticated.php` dan modifikasi loop untuk guard yang ada di dalam method `handle` tersebut seperti berikut. ```php foreach ($guards as $guard) { if (Auth::guard($guard)->check()) { if ($request->expectsJson()) { return response()->json(['error' => 'You already authenticated.'], 200); } return redirect(RouteServiceProvider::HOME); } } ``` Apa yang kita tambahkan adalah, ketika request mengharapkan json, kita akan return json dengan pesan `You already authenticated`. Masih didalam folder middleware, silahkan buka file `Authenticate.php` dan buat default nya ke SPA url yang kita punya jika request tidak di dapat dari json. ```php protected function redirectTo($request) { if (! $request->expectsJson()) { return url(env('SPA_URL') . '/login'); } } ``` Untuk mengaktifkan email, ada yang perlu Anda tambahkan pada model `User`, silahkan buka filenya di `app/Models/User.php` dan implementasikan `MustVerifyEmail` ke dalam kelas User tersebut seperti berikut. ```php class User extends Authenticatable implements MustVerifyEmail { use Notifiable; // ... } ``` Next, kita setup untuk reset password, apa yang kita lakukan disini hanyalah memodifikasi url default yang diberi laravel itu sendiri ke dalam SPA kita. silahkan buka `AuthServiceProvider` yang ada di `App\Providers\AuthServiceProvider.php` dan tepat pada `boot` method. ```php public function boot() { ResetPassword::createUrlUsing(function ($user, string $token) { return env('SPA_URL') . '/reset-password?token=' . $token; }); } ``` Jangan lupa untuk memasukkan `ResetPassword` class kedalam `AuthServiceProvider` seperti berikut. ```php namespace App\Providers; use Illuminate\Auth\Notifications\ResetPassword; ... ``` Jika sudah, maka kita hampir selesai, silahkan buka route `api.php` dan masukkan authenticated user didalam `auth:sanctum` seperti berikut. ```php use Illuminate\Http\Request; Route::middleware('auth:sanctum')->get('/users/{user}', function (Request $request) { return $request->user(); }); ``` Nah jika sudah, harusnya semua sudah selesai, jika kalian ingin tau bagaimana kerja dengan breeze, kalian bisa lihat [disini](https://parsinta.com/series/mari-kita-bangun-screencast-8iy2gs).
Read More

Masih Banyak Tangan Yang Tega Berbuat Nista

Aku rindu akan kicauan burung yang setiap pagi dulunya kudengar kini sudah tidak ada lagi, yang ada hanya suara klakson mobil, motor yang kadang buat kita hanya setres waktu demi waktu. Melihat kejadian ini kadang kita di gambarkan akan miskinnya kedamaian yang kita lalui saat ini. Apa lagi jika sekarang ini kita sedang di uji oleh tuhan, dihadirkan pandemi yang sudah lebih kurang 2 tahun kita hadapi, namun berapa banyak yang belum sadar akan hal ini, bahkan ada yang memanfaatkan situasi sedih seperti ini. Jika kita berkaca dari lirik lagu Ebit G. Ade yang berjudul "Untuk Kita Renungkan" > Memang bila kita kaji lebih jauh Dalam kekalutan, masih banyak tangan Yang tega berbuat nista Sangat jelas, bahwa apa yang kita lalui saat ini tidak ada ketidakmiripannya dengan lagu itu, seperti yang tadi dibahas diatas, bahkan pandemi ini adalah musibah, tapi masih banyak juga yang memanfaatkan situasi ini. Memanfaatkan seperti apa ? Kita semua tahu bahwa ya ujung-ujungnya uang. Kenapa uang ? karena semua orang mau kaya ya ? Tidak sih, cuma kebanyakan orang ingin kekuasaan. Bukankah salah satu yang bisa dibilang dunia itu sudah tua jika mayoritas manusia yang ada saat ini menuntut akan kekuasaan. Seluruh jajaran ingin memperebutkan dunia yang sementara semata.
Read More

Tuhan Bukan Menciptakan Manusia Cari Uang Lalu Mati

Saat sekarang ini, semua orang mempertuhankan uang, entah apapun nanti yang dibuat, tapi ujung-ujungnya ya duit. Padahal hidup berkecukupan itu sangat luar biasa nikmatnya. Kadang jika di bandingkan, kita bingung, antara binatang dan manusia, binatang tidak punya akal tapi sepertinya punya akal. Jika ada jebra lewat 5 dihadapan harimau, harimau akan mengejar mereka semua, tapi jika sudah dapat 1 ekor, harimau tidak akan memangsa jebra yang 4 lagi melainkan membiarkan mereka pergi. Hal ini justru tidak berbanding lurus dengan kita yang manusia ini, saya yakin, jika kita jadi harimau saat itu juga, pasti yang 4 lagi dibuat di kulkas atau paling tidak dibawa lah pulang dan di bagikan ke orang-orang yang tidak membutuhkan asal terlihat dermawan. Hidup memang sulit, jika mayoritas pemikiran tidak bisa berubah. Percaya atau tidak, semua akan sia-sia. Berhenti mempertuhankan uang dan kembali untuk hidup dengan mensukuri dari titik yang paling terkecil sekalipun. Jadilah manusia yang manusia, bukan manusia yang berusaha menjadi lebih parah dari pada binatang.
Read More

How to Validate Multiple Image in Laravel

First of all, I will assume you to create a form with multiple image upload, and you will need to validate the images is required when the request is in your `store` method instead of `update` method. Let's imagine that your form like this. ```xml <form action="/your-action-to-store" method="post" enctype="multipart/form-data"> @csrf <div class="mb-4"> <input type="file" name="images[]" id="images" multiple> @error('images') <div class="invalid-feedback">{{ $message }}</div> @enderror </div> ... </form> ``` Now, let's request your form request, I think it'll be nice if we can assume it your blog post. So you may name it `PostRequest`. ```bash php artisan make:request PostRequest ``` And then, we will need to open that file inside `app/Http/Requests/PostRequest.php` ```PHP use Illuminate\Routing\Route; use Illuminate\Validation\Rule; class PostRequest extends FormRequest { public function authorize() { return true; } public function rules(Route $route) { return [ 'images' => Rule::requiredIf($route->getActionMethod() == "store"), 'images.*' => ['image', 'mimes:jpeg,png,jpg,gif,svg,webp', 'max:2048'], 'title' => ['required'], ]; } } ``` And now, in your store method you can use the `PostRequest` and bind to your `store` method like this: ```php use App\Http\Requests\PostRequest; class PostController { public function store (PostRequest $request) { // do anything } } ``` And you're done. And now you understand to not duplicate your validation rule when you want to update the "post".
Read More
Irsyad Notes Since 1987 ™