SimpleSocialAuthLib is a Python library designed to simplify social authentication for various providers. It offers a straightforward interface for handling OAuth2 flows and retrieving user data from popular social platforms.
Project description
SimpleSocialAuthLib
SimpleSocialAuthLib is a Python library designed to simplify social authentication for various providers. It offers a straightforward interface for handling OAuth2 flows and retrieving user data from popular social platforms.
Contents
- Why use SimpleSocialAuthLib?
- Installation
- Configuration
- Usage
- Returned Data Structure and OAuth URLs
- Full Example
- Contributing
- License
Why use SimpleSocialAuthLib?
- Simplicity: Offers a clean and intuitive API for social authentication.
- Flexibility: Supports multiple social providers with a consistent interface.
- Type Safety: Utilizes Python type hints for better code quality and IDE support.
- Extensibility: Easily add new social providers by extending the base classes.
Supported Social Providers
- GitHub
Installation
Install SimpleSocialAuthLib:
# using pip
pip install simplesocialauthlib
# using pdm
pdm add simplesocialauthlib
# using uv
uv add simplesocialauthlib
Configuration
Before using SimpleSocialAuthLib, you need to set up your social provider credentials. Here's how to configure for Google and GitHub:
- Go to the Google Cloud Console.
- Create a new project or select an existing one.
- Enable the Google+ API.
- Create OAuth 2.0 credentials (client ID and client secret).
- Set up the authorized redirect URIs.
GitHub
- Go to your GitHub Developer Settings.
- Click on "New OAuth App".
- Fill in the application details, including the callback URL.
- Once created, you'll get a client ID and can generate a client secret.
Usage
Here's a basic example of how to use SimpleSocialAuthLib with Google authentication:
from simplesocialauthlib.providers.google import GoogleSocialAuth
# Initialize the Google auth provider
google_auth = GoogleSocialAuth(
client_id="your_google_client_id",
client_secret="your_google_client_secret",
redirect_uri="your_redirect_uri"
)
# After receiving the code from Google's OAuth redirect
code = "received_authorization_code"
# Complete the sign-in process
user_data = google_auth.sign_in(code=code)
# Use the user data as needed
print(f"Welcome, {user_data['full_name']}!")
Returned Data Structure and OAuth URLs
OAuth URL:
https://accounts.google.com/o/oauth2/v2/auth?redirect_uri={{ GOOGLE_REDIRECT_URI }}&prompt=consent&response_type=code&client_id={{ GOOGLE_CLIENT_ID }}&scope=openid%20email%20profile&access_type=offline
User Data Structure:
class GoogleUserData(TypedDict):
first_name: str
last_name: str
full_name: str
email: str
email_verified: bool
picture: str | None
GitHub
OAuth URL:
https://github.com/login/oauth/authorize/?client_id={{ GITHUB_CLIENT_ID }}
User Data Structure:
class GithubUserData(TypedDict):
username: str
full_name: str
email: str
picture: str | None
bio: str | None
location: str | None
Full Example
Here's a full example using Flask to implement social login with both Google and GitHub:
# app.py
import os
import logging
from flask import Flask, request, redirect, flash, render_template
from dotenv import load_dotenv
from simplesocialauthlib.providers.google import GoogleSocialAuth
from simplesocialauthlib.providers.github import GithubSocialAuth
load_dotenv()
logging.basicConfig(level=logging.INFO)
app = Flask(__name__)
app.secret_key = os.environ["SECRET_KEY"]
@app.route("/login")
def login():
return render_template(
"login.html",
GOOGLE_CLIENT_ID=os.environ["GOOGLE_CLIENT_ID"],
GOOGLE_REDIRECT_URI=os.environ["GOOGLE_REDIRECT_URI"],
GITHUB_CLIENT_ID=os.environ["GITHUB_CLIENT_ID"],
)
@app.route("/login/google")
def sign_in_with_google():
code = request.args.get("code")
if not code:
return redirect("/login")
try:
google_auth = GoogleSocialAuth(
client_id=os.environ["GOOGLE_CLIENT_ID"],
client_secret=os.environ["GOOGLE_CLIENT_SECRET"],
redirect_uri=os.environ["GOOGLE_REDIRECT_URI"]
)
user_data = google_auth.sign_in(code=code)
# Process user_data (e.g., create/update user in your database)
flash("You are now signed in with Google.", category="success")
return redirect("/")
except Exception as e:
logging.error(e)
flash("Something went wrong. Please try again.", category="danger")
return redirect("/login")
@app.route("/login/github")
def sign_in_with_github():
code = request.args.get("code")
if not code:
return redirect("/login")
try:
github_auth = GithubSocialAuth(
client_id=os.environ["GITHUB_CLIENT_ID"],
client_secret=os.environ["GITHUB_CLIENT_SECRET"]
)
user_data = github_auth.sign_in(code=code)
# Process user_data (e.g., create/update user in your database)
flash("You are now signed in with Github.", category="success")
return redirect("/")
except Exception as e:
logging.error(e)
flash("Something went wrong. Please try again.", category="danger")
return redirect("/login")
if __name__ == "__main__":
app.run(debug=True)
<!-- login.html -->
...
<div class="d-grid gap-3 mx-auto" style="max-width: 320px;">
<!-- Google -->
<a
href="https://accounts.google.com/o/oauth2/v2/auth?redirect_uri={{ GOOGLE_REDIRECT_URI }}&prompt=consent&response_type=code&client_id={{ GOOGLE_CLIENT_ID }}&scope=openid%20email%20profile&access_type=offline"
>
<span>Login with Google</span>
</a>
<!-- Github -->
<a
href="https://github.com/login/oauth/authorize/?client_id={{ GITHUB_CLIENT_ID }}"
>
<span>Login with Github</span>
</a>
</div>
...
Contributing
Contributions to SimpleSocialAuthLib are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters