Basic Usage Examples
Common usage patterns and examples for integrating SVA OAuth.
Basic Protected View
The simplest way to protect a view:
from django.shortcuts import render
from sva_oauth_client.decorators import sva_oauth_required
from sva_oauth_client.utils import get_sva_claims
@sva_oauth_required
def dashboard(request):
"""Protected dashboard view"""
claims = get_sva_claims(request)
return render(request, 'dashboard.html', {
'email': claims.get('email'),
'name': claims.get('name'),
})
Requiring Specific Blocks
Require specific identity blocks:
from sva_oauth_client.decorators import sva_blocks_required
from sva_oauth_client.utils import get_sva_claims
@sva_blocks_required('email', 'name', 'phone')
def profile_view(request):
"""Requires email, name, and phone blocks"""
claims = get_sva_claims(request)
# These are guaranteed to exist
return render(request, 'profile.html', {
'email': claims['email'],
'name': claims['name'],
'phone': claims['phone'],
})
Manual Authentication Check
Check authentication manually:
from sva_oauth_client.utils import is_authenticated, get_sva_claims
from django.shortcuts import redirect, render
def my_view(request):
if is_authenticated(request.session):
claims = get_sva_claims(request)
return render(request, 'authenticated.html', {'claims': claims})
else:
return redirect('sva_oauth_client:login')
Class-Based Views
Use with class-based views:
from django.views import View
from django.utils.decorators import method_decorator
from sva_oauth_client.decorators import sva_oauth_required
from sva_oauth_client.utils import get_sva_claims
@method_decorator(sva_oauth_required, name='dispatch')
class DashboardView(View):
def get(self, request):
claims = get_sva_claims(request)
return render(request, 'dashboard.html', {'claims': claims})
API Endpoint
Create a JSON API endpoint:
from django.http import JsonResponse
from sva_oauth_client.decorators import sva_oauth_required
from sva_oauth_client.utils import get_sva_claims
@sva_oauth_required
def api_user_info(request):
"""API endpoint returning user information"""
claims = get_sva_claims(request)
return JsonResponse({
'email': claims.get('email'),
'name': claims.get('name'),
'username': claims.get('username'),
})
Conditional Blocks
Handle optional blocks gracefully:
@sva_oauth_required
def profile_view(request):
claims = get_sva_claims(request)
context = {
'email': claims.get('email'),
'name': claims.get('name'),
}
# Optional blocks
if 'phone' in claims:
context['phone'] = claims['phone']
if 'address' in claims:
context['address'] = claims['address']
return render(request, 'profile.html', context)
Error Handling
Handle token errors:
from sva_oauth_client.utils import get_sva_claims
from sva_oauth_client.client import SVATokenError
from django.shortcuts import redirect
@sva_oauth_required
def my_view(request):
try:
claims = get_sva_claims(request)
# Process claims...
except SVATokenError:
# Token expired or invalid
return redirect('sva_oauth_client:login')
Template Usage
Check authentication in templates:
{% if request.session.sva_oauth_access_token %}
<p>You are logged in!</p>
<a href="{% url 'sva_oauth_client:logout' %}">Logout</a>
{% else %}
<a href="{% url 'sva_oauth_client:login' %}">Sign In</a>
{% endif %}
Next Steps
- Explore Advanced Usage for complex scenarios
- Check Django Integration for Django-specific patterns
- See Custom Scopes for requesting specific data