How to Automatically Login into Laravel App in Your Local Dev Environment
I often find myself spinning up Laravel projects for prototypes and idea testing and then letting them sit until I can pick them back up. Logging in whenever I start work gets annoying, and there's no point in manually logging in to my local instance since my account is the admin. Fortunately, there are a few solutions to automate this process in Laravel. I'll delve into the various methods to automatically log in to your Laravel app in your local development environment, enhancing your workflow and boosting productivity.
One approach to automating the login process for the Laravel application is session-based auto-login. This method involves setting up a mechanism that automatically logs in a predefined user whenever the application is accessed in the local development environment.
Each solution below assumes you've seeded or registered a local user account in your database.
You can create a custom route in your Laravel routes file (routes/web.php) that triggers the auto-login functionality.
When you access the /auto-login route in your local development environment, Laravel will automatically log in the specified user, redirecting them to the desired page (in this case, /dashboard).
Another method to automate your Laravel application's login process is leveraging custom middleware designed for auto-login functionality. This approach provides more flexibility and control over the auto-login process, allowing you to define custom logic and conditions for authentication.
Generate a new middleware using the Artisan command make:middleware.
Register the custom middleware in the HTTP kernel (app/Http/Kernel.php) to apply it to the desired routes or groups of routes.
This method allows you to log in automatically as soon as you load the application, and it is the method I use most often. I added a check to ensure that the environment is local.
if ($this->app->environment('local')) {
$user = User::first();
if (isset($user)) {
$this->app['auth']->setUser(User::first());
}
}
If you don't have the user table seeded with a user, the above code will cause an error when running the seeders. I tweaked the code to check for the table's existence to avoid the error when running seeders.
Sometimes, you might want to seed your database with an admin user for testing purposes. Here's how you can do it:
Generate a new seeder class using the Artisan command make:seeder.
Within the generated UserSeeder class, define the logic to create an admin user.
Finally, run the seeder using the Artisan command db:seed.
Following these steps, you can seamlessly integrate auto-login functionality into your Laravel application's local development environment, reducing the time and effort spent on repetitive login tasks. Additionally, seeding your database with an admin user ensures that you have a user account available for testing and development purposes.
How to use Backblaze B2 with Laravel
I am working on a Laravel project and decided to use a Backblaze bucket as it's cheaper for storage when compared to AWS S3. I couldn't find a tutorial on how to get it working from scratch and I tested a bunch of Laravel B2 libraries that didn't end up working. The good news is that you don't need a special B2 plugin and instead can use the S3 package recommended by the Laravel docs.
If you haven't added the flysystem-aws-s3 package, add it to your project using composer:
Login to your B2 account and create your bucket with your required settings. Once created, you'll want to create a new application key with the permissions you need for your app. You should get a confirmation once it's generated:
Open your .env file and locate the settings for AWS. You'll need to add one key that's not there by default:
Match the settings in your .env from the application key to the values below.
Now you should be able to call the Laravel storage system like normal:
How to Extract Text from image using Laravel and Amazon Rekognition API
I'm currently working on a project that requires extracting text from images of variable quality. I'm doing quick prototypes using PHP and Laravel, but I've found the documentation for accomplishing this a bit lacking. After working on it for a bit, I figured out a really simple solution and am sharing in case it helps anyone else.
This sample will send the image to the API as a blob instead of using a URL. I had tried Base64 encoding it without any luck. I discovered that using Imagick was the easiest way to make this work so the sample relies on that.
Fire up terminal and add a requirement for aws/aws-sdk-php:
Add keys for your AWS access keys and region to your .ENV file:
Create a controller, add the snippet below, and create a route to the controller. Check the URL and you should have a dump showing the array returned from AWS with all the text, bounding boxes, and information.
How to test email sending in Laravel 5.3 using artisan tinker
I'm building a Laravel app and ran into an error when trying to send mail but wasn't getting an error back since the request was posted through ajax. If you're trying to troubleshoot it, artisan tinker app is very useful to get more information on the error.
Fire up terminal/command line and run:
and then run the following snippet:
You should either see a success/null message if everything was correct, or an error with details on what went wrong.
The error I encountered required configuring 2FA in Gmail or you can choose setting the insecure app option up to send through Gmail for testing.