Laravel Facebook Login API

Laravel Facebook Login API

 Laravel Facebook Login API (Socialite + OAuth 2.0)

βœ… Step 1: Install Laravel Socialite

composer require laravel/socialite


βœ… Step 2: Create Facebook App

  1. Go to Facebook Developers
    πŸ‘‰ https://developers.facebook.com/apps/
  2. Create App β†’ Consumer
  3. Add Facebook Login
  4. Choose Web
  5. Set Valid OAuth Redirect URI
  6. Create an app
  7. Authenticate and request data from users with Facebook Login check
  8. Which business portfolio do you want to connect to this app?
  9. Check I don’t want to connect a business portfolio yet.
  10. Next
  11. Go to Dashboard
  12. Permissions and features
  13. Email add
  14. Setting Redirect URI with Valid OAuth Redirect URIs
  15. App Settings->Basic->App ID, App secret


http://127.0.0.1:8000/api/auth/facebook/callback

Copy:

  • App ID
  • App Secret

βœ… Step 3: Configure .env

FACEBOOK_CLIENT_ID=your_facebook_app_id
FACEBOOK_CLIENT_SECRET=your_facebook_app_secret
FACEBOOK_REDIRECT_URI=http://127.0.0.1:8000/api/auth/facebook/callback

βœ… Step 4: Configure config/services.php

'facebook' => [
    'client_id'     => env('FACEBOOK_CLIENT_ID'),
    'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
    'redirect'      => env('FACEBOOK_REDIRECT_URI'),
],

βœ… Step 5: API Routes

πŸ“ routes/api.php

use App\Http\Controllers\Api\Auth\FacebookLoginController;

Route::get('/auth/facebook', [FacebookLoginController::class, 'redirectToFacebook']);
Route::get('/auth/facebook/callback', [FacebookLoginController::class, 'handleFacebookCallback']);

βœ… Step 6: Controller

πŸ“ app/Http/Controllers/Api/Auth/FacebookLoginController.php

namespace App\Http\Controllers\Api\Auth;

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

class FacebookLoginController extends Controller
{
    public function redirectToFacebook()
    {
        return Socialite::driver('facebook')
            ->stateless()
            ->redirect();
    }

    public function handleFacebookCallback()
    {
        try {
            $facebookUser = Socialite::driver('facebook')
                ->stateless()
                ->user();

            $user = User::where('email', $facebookUser->getEmail())->first();

            if (!$user) {
                $user = User::create([
                    'name'        => $facebookUser->getName(),
                    'email'       => $facebookUser->getEmail(),
                    'facebook_id' => $facebookUser->getId(),
                    'password'    => bcrypt(Str::random(16)),
                ]);
            }

            $token = $user->createToken('API Token')->plainTextToken;

            return response()->json([
                'success' => true,
                'user'    => $user,
                'token'   => $token,
            ]);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'Facebook login failed',
                'error'   => $e->getMessage()
            ], 500);
        }
    }
}

βœ… Step 7: Update Users Table

php artisan make:migration add_facebook_id_to_users_table

Schema::table('users', function (Blueprint $table) {
    $table->string('facebook_id')->nullable()->unique();
});

php artisan migrate

βœ… Step 8: Protect API Routes (Sanctum)

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

βœ… Success Response (JSON)

{
  "success": true,
  "user": {
    "id": 5,
    "name": "Milon Hossain",
    "email": "milon@example.com",
    "facebook_id": "1023344556677"
  },
  "token": "1|xYzAbCdEf123456"
}