Skip to main content

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