A Python package for OAuth authentication with various social providers, inspired by Laravel Socialite.
pip install py-socialite
Create a configuration file (e.g., socialite.py) with your OAuth credentials:
# socialite.py
SOCIAL_PROVIDERS = {
'google': {
'client_id': 'your-client-id',
'client_secret': 'your-client-secret',
'redirect_uri': 'your-callback-url',
'scope': 'openid email profile'
},
'github': {
'client_id': 'your-client-id',
'client_secret': 'your-client-secret',
'redirect_uri': 'your-callback-url',
'scope': 'read:user user:email'
},
'dropbox': {
'client_id': 'your-client-id',
'client_secret': 'your-client-secret',
'redirect_uri': 'your-callback-url'
},
'x': {
'client_id': 'your-client-id',
'client_secret': 'your-client-secret',
'redirect_uri': 'your-callback-url',
'scope': 'tweet.read users.read follows.read offline.access'
},
'linkedin': {
'client_id': 'your-client-id',
'client_secret': 'your-client-secret',
'redirect_uri': 'your-callback-url',
'scope': 'openid profile email'
},
'facebook': {
'client_id': 'your-client-id',
'client_secret': 'your-client-secret',
'redirect_uri': 'your-callback-url',
'scope': 'email public_profile'
},
'microsoft': {
'client_id': 'your-client-id',
'client_secret': 'your-client-secret',
'redirect_uri': 'your-callback-url',
'scope': 'openid email profile User.Read'
}
}
Set the configuration path in your environment:
export SOCIALITE_CONFIG_PATH="modules.common.config.socialite"
# or add it to your .env file
SOCIALITE_CONFIG_PATH='modules.common.config.socialite'
from py_socialite.socialite import Socialite
# Initialize Socialite
socialite = Socialite()
# Get authorization URL
auth_url = socialite.provider('google').get_auth_url()
# After callback, get user info
user = socialite.provider('google').get_user(code)
The package raises SocialAuthError
for any authentication issues.
try:
user = socialite.provider('google').get_user(code)
except SocialAuthError as e:
print(f"Authentication failed: {str(e)}")
py-socialite/
├── py_socialite/
│ ├── __init__.py # Version and package info
│ ├── exceptions.py # Custom exceptions
│ ├── config.py # Provider configurations
│ ├── socialite.py # Main service class
│ └── providers/
│ ├── base.py # Abstract base provider
│ └── google.py # Google implementation
├── setup.py # Package setup
└── deploy.sh # Deployment script
- python 3.10+
- requests
- python-dotenv
- github
- dropbox
- x
- microsoft
{
"provider": "google",
"id": "1234567890",
"email": "[email protected]",
"name": "John Doe",
"avatar": "https://example.com/avatar.jpg",
"raw": {
.....
}
}
Contributions are welcome! Please feel free to submit a Pull Request.