beecms/virtual-identity
Laravel package for managing “virtual identities” in your app—create, store, and switch between user personas/aliases for testing, demos, or multi-profile workflows. Provides models and helpers to associate identities with real users and control active identity context.
Installation
composer require beecms/virtual-identity
Publish the config file (if needed):
php artisan vendor:publish --provider="BeeCMS\VirtualIdentity\VirtualIdentityServiceProvider" --tag="config"
Configuration
config/virtual-identity.php for API keys (YouTube, Facebook, Twitter, Instagram)..env (e.g., YOUTUBE_API_KEY, FACEBOOK_APP_ID).Basic Usage
use BeeCMS\VirtualIdentity\Facades\VirtualIdentity;
$youtubeData = VirtualIdentity::get('youtube', 'channel-id');
dd($youtubeData);
$user = User::find(1);
$user->youtube = VirtualIdentity::get('youtube', $user->youtube_id);
$user->facebook = VirtualIdentity::get('facebook', $user->facebook_id);
$user->save();
Fetching Social Data
$data = VirtualIdentity::get('twitter', 'user-handle');
public function __construct(private VirtualIdentityService $virtualIdentity) {}
$this->virtualIdentity->get('instagram', 'profile-id');
Storing Data
SocialProfile):
$profile = new SocialProfile();
$profile->platform = 'youtube';
$profile->data = VirtualIdentity::get('youtube', $channelId);
$profile->save();
Caching Responses
$data = Cache::remember("social_{$platform}_{$id}", now()->addHours(1), function () use ($platform, $id) {
return VirtualIdentity::get($platform, $id);
});
Error Handling
try {
$data = VirtualIdentity::get('facebook', 'invalid-id');
} catch (\Exception $e) {
Log::error("Failed to fetch Facebook data: " . $e->getMessage());
return response()->json(['error' => 'Social data unavailable'], 500);
}
FetchSocialDataJob::dispatch('twitter', 'user-handle');
API Key Restrictions
google/apiclient) for advanced features.Rate Limits
try {
$data = VirtualIdentity::get('twitter', $id);
} catch (\BeeCMS\VirtualIdentity\Exceptions\RateLimitExceeded $e) {
sleep($e->getRetryAfter());
retry();
}
Data Format Inconsistencies
snippet, Facebook returns from). Normalize before storing:
$normalized = collect($data)->only(['id', 'name', 'url', 'created_at']);
Deprecated Endpoints
Enable Logging
Add to config/virtual-identity.php:
'debug' => env('APP_DEBUG', false),
Logs will appear in storage/logs/laravel.log.
Inspect Raw Responses Temporarily modify the service to dump raw data:
// In VirtualIdentityService.php
$response = $this->http->get($url);
\Log::debug('Raw response:', [$response->body()]);
Add New Platforms
VirtualIdentityService to support unsupported platforms (e.g., TikTok):
// In a custom service
public function get($platform, $id)
{
if ($platform === 'tiktok') {
return $this->fetchTikTokData($id);
}
return parent::get($platform, $id);
}
Custom Data Mappers
VirtualIdentity::extend('youtube', function ($data) {
return collect($data)->merge(['views' => $data['statistics']['viewCount']]);
});
Webhooks for Real-Time Updates
.env:
YOUTUBE_API_KEY=your_key
FACEBOOK_APP_ID=your_app_id
TWITTER_BEARER_TOKEN=your_token
use BeeCMS\VirtualIdentity\Facades\VirtualIdentity;
User::macro('fetchSocialData', function () {
$this->youtube = VirtualIdentity::get('youtube', $this->youtube_id);
$this->facebook = VirtualIdentity::get('facebook', $this->facebook_id);
return $this;
});
How can I help you explore Laravel packages today?