<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: John Maths</title>
    <description>The latest articles on DEV Community by John Maths (@johnmaths9).</description>
    <link>https://dev.to/johnmaths9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1117801%2F1c791227-25e4-43cb-b0fd-70cd3f0ba1cf.jpg</url>
      <title>DEV Community: John Maths</title>
      <link>https://dev.to/johnmaths9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johnmaths9"/>
    <language>en</language>
    <item>
      <title>How to Implement "Login with Google" in Laravel 11</title>
      <dc:creator>John Maths</dc:creator>
      <pubDate>Sat, 17 Aug 2024 14:42:41 +0000</pubDate>
      <link>https://dev.to/johnmaths9/how-to-implement-login-with-google-in-laravel-11-161c</link>
      <guid>https://dev.to/johnmaths9/how-to-implement-login-with-google-in-laravel-11-161c</guid>
      <description>&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Laravel project set up&lt;/li&gt;
&lt;li&gt;Composer installed&lt;/li&gt;
&lt;li&gt;Google Developer Account&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Set up Google OAuth Credentials
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to the Google Developer Console&lt;/li&gt;
&lt;li&gt;Create a new project or select an existing one&lt;/li&gt;
&lt;li&gt;Enable the Google+ API&lt;/li&gt;
&lt;li&gt;Go to Credentials -&amp;gt; Create Credentials -&amp;gt; OAuth Client ID&lt;/li&gt;
&lt;li&gt;Select Web Application, add your app's URL and callback URL (e.g., &lt;a href="http://your-app-url/login/google/callback" rel="noopener noreferrer"&gt;http://your-app-url/login/google/callback&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Note down your Client ID and Client Secret&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 2: Install Laravel Socialite
&lt;/h3&gt;

&lt;p&gt;Install Laravel Socialite via Composer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require laravel/socialite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Configure Socialite
&lt;/h3&gt;

&lt;p&gt;Add the following to your &lt;code&gt;config/services.php&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'google' =&amp;gt; [
    'client_id' =&amp;gt; env('GOOGLE_CLIENT_ID'),
    'client_secret' =&amp;gt; env('GOOGLE_CLIENT_SECRET'),
    'redirect' =&amp;gt; env('GOOGLE_REDIRECT_URI'),
],
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, add these to your &lt;code&gt;.env&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=http://your-app-url/login/google/callback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Set up Routes
&lt;/h3&gt;

&lt;p&gt;Add these routes to your &lt;code&gt;routes/web.php&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use App\Http\Controllers\Auth\GoogleController;

Route::get('login/google', [GoogleController::class, 'redirectToGoogle'])-&amp;gt;name('login.google');
Route::get('login/google/callback', [GoogleController::class, 'handleGoogleCallback']);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Create GoogleController
&lt;/h3&gt;

&lt;p&gt;Create a new controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:controller Auth/GoogleController
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implement the controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;

class GoogleController extends Controller
{
    public function redirectToGoogle()
    {
        return Socialite::driver('google')-&amp;gt;redirect();
    }

    public function handleGoogleCallback()
    {
        try {
            $user = Socialite::driver('google')-&amp;gt;user();
            $finduser = User::where('google_id', $user-&amp;gt;id)-&amp;gt;first();

            if ($finduser) {
                Auth::login($finduser);
                return redirect()-&amp;gt;intended('dashboard');
            } else {
                $newUser = User::create([
                    'name' =&amp;gt; $user-&amp;gt;name,
                    'email' =&amp;gt; $user-&amp;gt;email,
                    'google_id'=&amp;gt; $user-&amp;gt;id,
                    'password' =&amp;gt; encrypt('123456dummy')
                ]);

                Auth::login($newUser);
                return redirect()-&amp;gt;intended('dashboard');
            }
        } catch (\Exception $e) {
            dd($e-&amp;gt;getMessage());
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6: Update User Model
&lt;/h3&gt;

&lt;p&gt;Add &lt;code&gt;google_id&lt;/code&gt;to the fillable array in your User model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;protected $fillable = [
    'name',
    'email',
    'password',
    'google_id',
];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 7: Add Google ID to Users Table
&lt;/h3&gt;

&lt;p&gt;Create a new migration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:migration add_google_id_to_users_table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the new migration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function up()
{
    Schema::table('users', function ($table) {
        $table-&amp;gt;string('google_id')-&amp;gt;nullable();
    });
}

public function down()
{
    Schema::table('users', function ($table) {
        $table-&amp;gt;dropColumn('google_id');
    });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the migration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 8: Add Login Button
&lt;/h3&gt;

&lt;p&gt;In your login view, add a "Login with Google" button:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="{{ route('login.google') }}" class="btn btn-danger"&amp;gt;
    Login with Google
&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>How to Implement "Login with Facebook" in Laravel 11</title>
      <dc:creator>John Maths</dc:creator>
      <pubDate>Thu, 15 Aug 2024 17:06:29 +0000</pubDate>
      <link>https://dev.to/johnmaths9/how-to-implement-login-with-facebook-in-laravel-2m5p</link>
      <guid>https://dev.to/johnmaths9/how-to-implement-login-with-facebook-in-laravel-2m5p</guid>
      <description>&lt;p&gt;This tutorial will guide you through the process of adding Facebook login functionality to your Laravel application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Laravel project set up&lt;/li&gt;
&lt;li&gt;Composer installed&lt;/li&gt;
&lt;li&gt;Facebook Developer Account&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Create a Facebook App
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to Facebook Developers&lt;/li&gt;
&lt;li&gt;Click on "My Apps" and then "Create App"&lt;/li&gt;
&lt;li&gt;Choose "Consumer" as the app type&lt;/li&gt;
&lt;li&gt;Fill in the app details and create the app&lt;/li&gt;
&lt;li&gt;In the app dashboard, note down your App ID and App Secret&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 2: Install Laravel Socialite
&lt;/h3&gt;

&lt;p&gt;Laravel Socialite provides an expressive, fluent interface to OAuth authentication with Facebook, Twitter, Google, LinkedIn, GitHub, GitLab and Bitbucket.&lt;br&gt;
Install it via Composer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require laravel/socialite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Configure Socialite
&lt;/h3&gt;

&lt;p&gt;Add the following to your &lt;code&gt;config/services.php&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'facebook' =&amp;gt; [
    'client_id' =&amp;gt; env('FACEBOOK_CLIENT_ID'),
    'client_secret' =&amp;gt; env('FACEBOOK_CLIENT_SECRET'),
    'redirect' =&amp;gt; env('FACEBOOK_REDIRECT_URI'),
],
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, add these to your &lt;code&gt;.env&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FACEBOOK_CLIENT_ID=your_facebook_app_id
FACEBOOK_CLIENT_SECRET=your_facebook_app_secret
FACEBOOK_REDIRECT_URI=http://localhost:8000/login/facebook/callback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Set up Routes
&lt;/h3&gt;

&lt;p&gt;Add these routes to your &lt;code&gt;routes/web.php&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use App\Http\Controllers\Auth\FacebookController;

Route::get('login/facebook', [FacebookController::class, 'redirectToFacebook'])-&amp;gt;name('login.facebook');
Route::get('login/facebook/callback', [FacebookController::class, 'handleFacebookCallback']);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Create &lt;code&gt;FacebookController&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Create a new controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:controller Auth/FacebookController
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implement the controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;

class FacebookController extends Controller
{
    public function redirectToFacebook()
    {
        return Socialite::driver('facebook')-&amp;gt;redirect();
    }

    public function handleFacebookCallback()
    {
        try {
            $user = Socialite::driver('facebook')-&amp;gt;user();
            $finduser = User::where('facebook_id', $user-&amp;gt;id)-&amp;gt;first();

            if ($finduser) {
                Auth::login($finduser);
                return redirect()-&amp;gt;intended('dashboard');
            } else {
                $newUser = User::create([
                    'name' =&amp;gt; $user-&amp;gt;name,
                    'email' =&amp;gt; $user-&amp;gt;email,
                    'facebook_id'=&amp;gt; $user-&amp;gt;id,
                    'password' =&amp;gt; encrypt('123456dummy')
                ]);

                Auth::login($newUser);
                return redirect()-&amp;gt;intended('dashboard');
            }
        } catch (\Exception $e) {
            dd($e-&amp;gt;getMessage());
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6: Update User Model
&lt;/h3&gt;

&lt;p&gt;Add facebook_id to the fillable array in your User model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;protected $fillable = [
    'name',
    'email',
    'password',
    'facebook_id',
];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 7: Add Facebook ID to Users Table
&lt;/h3&gt;

&lt;p&gt;Create a new migration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:migration add_facebook_id_to_users_table
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the new migration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function up()
{
    Schema::table('users', function ($table) {
        $table-&amp;gt;string('facebook_id')-&amp;gt;nullable();
    });
}

public function down()
{
    Schema::table('users', function ($table) {
        $table-&amp;gt;dropColumn('facebook_id');
    });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the migration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 8: Add Login Button
&lt;/h3&gt;

&lt;p&gt;In your login view, add a "Login with Facebook" button:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="{{ route('login.facebook') }}" class="btn btn-primary"&amp;gt;
    Login with Facebook
&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Using Queues and Jobs in Laravel 11: A Practical Guide</title>
      <dc:creator>John Maths</dc:creator>
      <pubDate>Thu, 15 Aug 2024 12:24:53 +0000</pubDate>
      <link>https://dev.to/johnmaths9/using-queues-and-jobs-in-laravel-a-practical-guide-3pn2</link>
      <guid>https://dev.to/johnmaths9/using-queues-and-jobs-in-laravel-a-practical-guide-3pn2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Queues in Laravel are an excellent way to improve your application's performance by deferring the processing of time-consuming or resource-intensive tasks. In this tutorial, we'll explore how to use queues and jobs to send a welcome email to new users after they register&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Set Up the Database for Queues
&lt;/h3&gt;

&lt;p&gt;First, we need to set up the database table for queues. Run the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan queue:table
php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Configure the Queue Driver
&lt;/h3&gt;

&lt;p&gt;In the &lt;code&gt;.env&lt;/code&gt; file, set the queue driver to database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;QUEUE_CONNECTION=database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Create a Job
&lt;/h3&gt;

&lt;p&gt;Let's create a new job using the artisan command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:job SendWelcomeEmail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Implement the Job
&lt;/h3&gt;

&lt;p&gt;Open the &lt;code&gt;app/Jobs/SendWelcomeEmail.php&lt;/code&gt; file and implement the job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Jobs;

use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;

class SendWelcomeEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;

    public function __construct(User $user)
    {
        $this-&amp;gt;user = $user;
    }

    public function handle()
    {
        Mail::to($this-&amp;gt;user-&amp;gt;email)-&amp;gt;send(new WelcomeEmail($this-&amp;gt;user));
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Create the Email Template
&lt;/h3&gt;

&lt;p&gt;Create a new email class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:mail WelcomeEmail

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then implement it in &lt;code&gt;app/Mail/WelcomeEmail.php&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Mail;

use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class WelcomeEmail extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this-&amp;gt;user = $user;
    }

    public function build()
    {
        return $this-&amp;gt;view('emails.welcome')
                    -&amp;gt;subject('Welcome to our site!');
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the email template in &lt;code&gt;resources/views/emails/welcome.blade.php&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Welcome {{ $user-&amp;gt;name }}!&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;We're excited to have you on board.&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6: Dispatch the Job to the Queue
&lt;/h3&gt;

&lt;p&gt;Now, you can dispatch the job to the queue when a new user registers. For example, in &lt;code&gt;app/Http/Controllers/Auth/RegisterController.php&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use App\Jobs\SendWelcomeEmail;

protected function create(array $data)
{
    $user = User::create([
        'name' =&amp;gt; $data['name'],
        'email' =&amp;gt; $data['email'],
        'password' =&amp;gt; Hash::make($data['password']),
    ]);

    SendWelcomeEmail::dispatch($user);

    return $user;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 7: Run the Queue Worker
&lt;/h3&gt;

&lt;p&gt;To process jobs in the queue, run the queue worker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan queue:work

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>How to upload Project on GitHub: A Step-by-Step Guide</title>
      <dc:creator>John Maths</dc:creator>
      <pubDate>Sun, 14 Jul 2024 22:33:48 +0000</pubDate>
      <link>https://dev.to/johnmaths9/how-to-upload-project-on-github-a-step-by-step-guide-14dp</link>
      <guid>https://dev.to/johnmaths9/how-to-upload-project-on-github-a-step-by-step-guide-14dp</guid>
      <description>&lt;h3&gt;
  
  
  Step 1 : Open your Github account
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v3mllc2kniyb11v7lty.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v3mllc2kniyb11v7lty.png" alt="Image description" width="420" height="141"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 : Click on new repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyflmjaclv8oeqwxo1gad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyflmjaclv8oeqwxo1gad.png" alt="Image description" width="332" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 : Fill out the repository details
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Repository name: (e.g., project-name)&lt;/li&gt;
&lt;li&gt;Description: (optional)&lt;/li&gt;
&lt;li&gt;Public or Private: Choose based on your preference.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5azlo6q3vknokx3ro1fe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5azlo6q3vknokx3ro1fe.png" alt="Image description" width="676" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 : Click "Create repository"
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fueswr4ci07csr4r85hd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fueswr4ci07csr4r85hd3.png" alt="Image description" width="246" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5 : Open Cmd and Navigate to your project directory
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdt2aak9swsgcpcy852ly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdt2aak9swsgcpcy852ly.png" alt="Image description" width="469" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6 : tpye "git init" and hit enter
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftm4akv3gnxb2ya1l31av.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftm4akv3gnxb2ya1l31av.png" alt="Image description" width="476" height="68"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7 : tpye "git add . " and hit enter
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fch54cu7u1rwbce9bcp9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fch54cu7u1rwbce9bcp9d.png" alt="Image description" width="239" height="35"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 8 : tpye 'git commit -m "anything" ' and hit enter
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5xlls6i3fxa31u90pj4x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5xlls6i3fxa31u90pj4x.png" alt="Image description" width="385" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 9 : Copy the repository URL After creating the repository
&lt;/h3&gt;

&lt;p&gt;you will see the URL (it will look like &lt;a href="https://github.com/yourusername/your-repo.git" rel="noopener noreferrer"&gt;https://github.com/yourusername/your-repo.git&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgau9g76wbg7cwr77q40.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgau9g76wbg7cwr77q40.png" alt="Image description" width="562" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 10 : tpye "git remote add origin &lt;a href="https://github.com/yourusername/your-repo.git" rel="noopener noreferrer"&gt;https://github.com/yourusername/your-repo.git&lt;/a&gt;" and hit enter
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4msrmartvqhg44goia6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4msrmartvqhg44goia6g.png" alt="Image description" width="434" height="56"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 11 : tpye "git push -u origin main" and hit enter
&lt;/h3&gt;

&lt;p&gt;Check if your default branch is main instead of master, use:&lt;br&gt;
&lt;code&gt;git push -u origin master&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezl7pgs0uagedr9cpmzn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezl7pgs0uagedr9cpmzn.png" alt="Image description" width="424" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Build an API with Laravel Breeze in Laravel 11</title>
      <dc:creator>John Maths</dc:creator>
      <pubDate>Fri, 12 Jul 2024 15:10:22 +0000</pubDate>
      <link>https://dev.to/johnmaths9/how-to-build-an-api-with-laravel-breeze-in-laravel-11-9k</link>
      <guid>https://dev.to/johnmaths9/how-to-build-an-api-with-laravel-breeze-in-laravel-11-9k</guid>
      <description>&lt;h2&gt;
  
  
  How to Build an API with Laravel Breeze in Laravel 11
&lt;/h2&gt;

&lt;p&gt;A step-by-step guide on building a simple API with authentication using Laravel Breeze in Laravel 11.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install Laravel
&lt;/h3&gt;

&lt;p&gt;First, create a new Laravel project using the Laravel installer or Composer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;laravel new api-breeze
&lt;span class="c"&gt;# Or via Composer&lt;/span&gt;
composer create-project laravel/laravel api-breeze
&lt;span class="nb"&gt;cd &lt;/span&gt;api-breeze
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Install Laravel Breeze
&lt;/h3&gt;

&lt;p&gt;Next, install Laravel Breeze and its dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require laravel/breeze &lt;span class="nt"&gt;--dev&lt;/span&gt;
php artisan breeze:install api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will install Breeze and set up the necessary scaffolding for API authentication.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure the Database and Run Migrations
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Update your .env file with your database credentials:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;DB_CONNECTION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mysql
&lt;span class="nv"&gt;DB_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1
&lt;span class="nv"&gt;DB_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3306
&lt;span class="nv"&gt;DB_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;laravel11_api
&lt;span class="nv"&gt;DB_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;span class="nv"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run the migrations to set up your database tables:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Create Authentication Endpoints
&lt;/h3&gt;

&lt;p&gt;Laravel Breeze provides the necessary endpoints for registration, login, and logout. The routes are defined in routes/api.php.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;use App&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\C&lt;/span&gt;ontrollers&lt;span class="se"&gt;\A&lt;/span&gt;uth&lt;span class="se"&gt;\A&lt;/span&gt;uthenticatedSessionController&lt;span class="p"&gt;;&lt;/span&gt;
use App&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\C&lt;/span&gt;ontrollers&lt;span class="se"&gt;\A&lt;/span&gt;uth&lt;span class="se"&gt;\R&lt;/span&gt;egisteredUserController&lt;span class="p"&gt;;&lt;/span&gt;
use Illuminate&lt;span class="se"&gt;\S&lt;/span&gt;upport&lt;span class="se"&gt;\F&lt;/span&gt;acades&lt;span class="se"&gt;\R&lt;/span&gt;oute&lt;span class="p"&gt;;&lt;/span&gt;

Route::post&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/register'&lt;/span&gt;, &lt;span class="o"&gt;[&lt;/span&gt;RegisteredUserController::class, &lt;span class="s1"&gt;'store'&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
Route::post&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/login'&lt;/span&gt;, &lt;span class="o"&gt;[&lt;/span&gt;AuthenticatedSessionController::class, &lt;span class="s1"&gt;'store'&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
Route::post&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/logout'&lt;/span&gt;, &lt;span class="o"&gt;[&lt;/span&gt;AuthenticatedSessionController::class, &lt;span class="s1"&gt;'destroy'&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;-&amp;gt;middleware&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'auth:sanctum'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Update Controllers
&lt;/h3&gt;

&lt;p&gt;Modify the &lt;code&gt;RegisteredUserController&lt;/code&gt; and &lt;code&gt;AuthenticatedSessionController&lt;/code&gt; to return JSON responses.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RegisteredUserController.php&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;namespace App&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\C&lt;/span&gt;ontrollers&lt;span class="se"&gt;\A&lt;/span&gt;uth&lt;span class="p"&gt;;&lt;/span&gt;

use App&lt;span class="se"&gt;\M&lt;/span&gt;odels&lt;span class="se"&gt;\U&lt;/span&gt;ser&lt;span class="p"&gt;;&lt;/span&gt;
use Illuminate&lt;span class="se"&gt;\A&lt;/span&gt;uth&lt;span class="se"&gt;\E&lt;/span&gt;vents&lt;span class="se"&gt;\R&lt;/span&gt;egistered&lt;span class="p"&gt;;&lt;/span&gt;
use Illuminate&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\R&lt;/span&gt;equest&lt;span class="p"&gt;;&lt;/span&gt;
use Illuminate&lt;span class="se"&gt;\S&lt;/span&gt;upport&lt;span class="se"&gt;\F&lt;/span&gt;acades&lt;span class="se"&gt;\H&lt;/span&gt;ash&lt;span class="p"&gt;;&lt;/span&gt;
use Illuminate&lt;span class="se"&gt;\V&lt;/span&gt;alidation&lt;span class="se"&gt;\R&lt;/span&gt;ules&lt;span class="p"&gt;;&lt;/span&gt;
use App&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\C&lt;/span&gt;ontrollers&lt;span class="se"&gt;\C&lt;/span&gt;ontroller&lt;span class="p"&gt;;&lt;/span&gt;

class RegisteredUserController extends Controller
&lt;span class="o"&gt;{&lt;/span&gt;
    public &lt;span class="k"&gt;function &lt;/span&gt;store&lt;span class="o"&gt;(&lt;/span&gt;Request &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$request&lt;/span&gt;-&amp;gt;validate&lt;span class="o"&gt;([&lt;/span&gt;
            &lt;span class="s1"&gt;'name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'required'&lt;/span&gt;, &lt;span class="s1"&gt;'string'&lt;/span&gt;, &lt;span class="s1"&gt;'max:255'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;,
            &lt;span class="s1"&gt;'email'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'required'&lt;/span&gt;, &lt;span class="s1"&gt;'string'&lt;/span&gt;, &lt;span class="s1"&gt;'email'&lt;/span&gt;, &lt;span class="s1"&gt;'max:255'&lt;/span&gt;, &lt;span class="s1"&gt;'unique:users'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;,
            &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'required'&lt;/span&gt;, &lt;span class="s1"&gt;'confirmed'&lt;/span&gt;, Rules&lt;span class="se"&gt;\P&lt;/span&gt;assword::defaults&lt;span class="o"&gt;()]&lt;/span&gt;,
        &lt;span class="o"&gt;])&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; User::create&lt;span class="o"&gt;([&lt;/span&gt;
            &lt;span class="s1"&gt;'name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;-&amp;gt;name,
            &lt;span class="s1"&gt;'email'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;-&amp;gt;email,
            &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; Hash::make&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;-&amp;gt;password&lt;span class="o"&gt;)&lt;/span&gt;,
        &lt;span class="o"&gt;])&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        event&lt;span class="o"&gt;(&lt;/span&gt;new Registered&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="nv"&gt;$token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;-&amp;gt;createToken&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'auth_token'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;-&amp;gt;plainTextToken&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;return &lt;/span&gt;response&lt;span class="o"&gt;()&lt;/span&gt;-&amp;gt;json&lt;span class="o"&gt;([&lt;/span&gt;
            &lt;span class="s1"&gt;'access_token'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$token&lt;/span&gt;,
            &lt;span class="s1"&gt;'token_type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Bearer'&lt;/span&gt;,
            &lt;span class="s1"&gt;'user'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;
        &lt;span class="o"&gt;])&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;AuthenticatedSessionController.php&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;namespace App&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\C&lt;/span&gt;ontrollers&lt;span class="se"&gt;\A&lt;/span&gt;uth&lt;span class="p"&gt;;&lt;/span&gt;

use Illuminate&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\R&lt;/span&gt;equest&lt;span class="p"&gt;;&lt;/span&gt;
use Illuminate&lt;span class="se"&gt;\S&lt;/span&gt;upport&lt;span class="se"&gt;\F&lt;/span&gt;acades&lt;span class="se"&gt;\A&lt;/span&gt;uth&lt;span class="p"&gt;;&lt;/span&gt;
use App&lt;span class="se"&gt;\H&lt;/span&gt;ttp&lt;span class="se"&gt;\C&lt;/span&gt;ontrollers&lt;span class="se"&gt;\C&lt;/span&gt;ontroller&lt;span class="p"&gt;;&lt;/span&gt;

class AuthenticatedSessionController extends Controller
&lt;span class="o"&gt;{&lt;/span&gt;
    public &lt;span class="k"&gt;function &lt;/span&gt;store&lt;span class="o"&gt;(&lt;/span&gt;Request &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$request&lt;/span&gt;-&amp;gt;validate&lt;span class="o"&gt;([&lt;/span&gt;
            &lt;span class="s1"&gt;'email'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'required'&lt;/span&gt;, &lt;span class="s1"&gt;'string'&lt;/span&gt;, &lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;,
            &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'required'&lt;/span&gt;, &lt;span class="s1"&gt;'string'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;,
        &lt;span class="o"&gt;])&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;Auth::attempt&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;-&amp;gt;only&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'email'&lt;/span&gt;, &lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="o"&gt;)))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return &lt;/span&gt;response&lt;span class="o"&gt;()&lt;/span&gt;-&amp;gt;json&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Invalid login credentials'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, 401&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Auth::user&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nv"&gt;$token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;-&amp;gt;createToken&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'auth_token'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;-&amp;gt;plainTextToken&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;return &lt;/span&gt;response&lt;span class="o"&gt;()&lt;/span&gt;-&amp;gt;json&lt;span class="o"&gt;([&lt;/span&gt;
            &lt;span class="s1"&gt;'access_token'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$token&lt;/span&gt;,
            &lt;span class="s1"&gt;'token_type'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Bearer'&lt;/span&gt;,
            &lt;span class="s1"&gt;'user'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;,
            &lt;span class="s1"&gt;'status'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Login successful'&lt;/span&gt;,
        &lt;span class="o"&gt;])&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    public &lt;span class="k"&gt;function &lt;/span&gt;destroy&lt;span class="o"&gt;(&lt;/span&gt;Request &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$request&lt;/span&gt;-&amp;gt;user&lt;span class="o"&gt;()&lt;/span&gt;-&amp;gt;currentAccessToken&lt;span class="o"&gt;()&lt;/span&gt;-&amp;gt;delete&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;return &lt;/span&gt;response&lt;span class="o"&gt;()&lt;/span&gt;-&amp;gt;json&lt;span class="o"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Logout successful'&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Run Laravel App
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6: Check following API
&lt;/h3&gt;

&lt;p&gt;Test Your API with Thunder Client&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmno0qxb10zndz15g5c6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmno0qxb10zndz15g5c6q.png" alt="Register" width="685" height="717"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqxljuhb69ngrvzzgbe1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqxljuhb69ngrvzzgbe1.png" alt="Login" width="671" height="759"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>api</category>
      <category>breeze</category>
    </item>
  </channel>
</rss>
