Laravel Facebook Login API (Socialite + OAuth 2.0)
β Step 1: Install Laravel Socialite
composer require laravel/socialite
β Step 2: Create Facebook App
- Go to Facebook Developers
π https://developers.facebook.com/apps/ - Create App β Consumer
- Add Facebook Login
- Choose Web
- Set Valid OAuth Redirect URI
- Create an app
- Authenticate and request data from users with Facebook Login check
- Which business portfolio do you want to connect to this app?
- Check I donβt want to connect a business portfolio yet.
- Next
- Go to Dashboard
- Permissions and features
- Email add
- Setting Redirect URI with Valid OAuth Redirect URIs
- 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"
}