Add Django Samples (#636)
Contains two sets of samples - one for the “Google auth” system and one for the “Django user auth” system.
This commit is contained in:
committed by
Jon Wayne Parrott
parent
8a6e3b2a34
commit
3f9fdbd5a3
21
samples/django/README.md
Normal file
21
samples/django/README.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Django Samples
|
||||
|
||||
These two sample Django apps provide a skeleton for the two main use cases of the
|
||||
`oauth2client.contrib.django_util` helpers.
|
||||
|
||||
Please see the
|
||||
[core docs](https://oauth2client.readthedocs.io/en/latest/) for more information and usage examples.
|
||||
|
||||
## google_user
|
||||
|
||||
This is the simpler use case of the library. It assumes you are using Google OAuth as your primary
|
||||
authorization and authentication mechanism for your application. Users log in with their Google ID
|
||||
and their OAuth2 credentials are stored inside the session.
|
||||
|
||||
## django_user
|
||||
|
||||
This is the use case where the application is already using the Django authorization system and
|
||||
has a Django model with a `django.contrib.auth.models.User` field, and would like to attach
|
||||
a Google OAuth2 credentials object to that model. Users have to login, and then can login with
|
||||
their Google account to associate the Google account with the user in the Django system.
|
||||
Credentials will be stored in the Django ORM backend.
|
||||
23
samples/django/django_user/manage.py
Executable file
23
samples/django/django_user/manage.py
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2016 Google Inc. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
import os
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myoauth.settings")
|
||||
|
||||
from django.core.management import execute_from_command_line
|
||||
|
||||
execute_from_command_line(sys.argv)
|
||||
0
samples/django/django_user/myoauth/__init__.py
Normal file
0
samples/django/django_user/myoauth/__init__.py
Normal file
115
samples/django/django_user/myoauth/settings.py
Normal file
115
samples/django/django_user/myoauth/settings.py
Normal file
@@ -0,0 +1,115 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
import os
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'eiw+mvmua#98n@p2xq+c#liz@r2&#-s07nkgz)+$zcl^o4$-$o'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = (
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'polls',
|
||||
'oauth2client.contrib.django_util',
|
||||
)
|
||||
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
)
|
||||
|
||||
ROOT_URLCONF = 'myoauth.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.template.context_processors.debug',
|
||||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'myoauth.wsgi.application'
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
}
|
||||
}
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/1.8/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
TIME_ZONE = 'UTC'
|
||||
|
||||
USE_I18N = True
|
||||
|
||||
USE_L10N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/1.8/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
GOOGLE_OAUTH2_CLIENT_ID = 'YOUR_CLIENT_ID'
|
||||
|
||||
GOOGLE_OAUTH2_CLIENT_SECRET = 'YOUR_CLIENT_SECRET'
|
||||
|
||||
GOOGLE_OAUTH2_SCOPES = (
|
||||
'email', 'profile')
|
||||
|
||||
GOOGLE_OAUTH2_STORAGE_MODEL = {
|
||||
'model': 'polls.models.CredentialsModel',
|
||||
'user_property': 'user_id',
|
||||
'credentials_property': 'credential',
|
||||
}
|
||||
|
||||
LOGIN_URL = '/login'
|
||||
30
samples/django/django_user/myoauth/urls.py
Normal file
30
samples/django/django_user/myoauth/urls.py
Normal file
@@ -0,0 +1,30 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from django.conf import urls
|
||||
from django.contrib import admin
|
||||
import django.contrib.auth.views
|
||||
from polls import views
|
||||
|
||||
import oauth2client.contrib.django_util.site as django_util_site
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
urls.url(r'^$', views.index),
|
||||
urls.url(r'^profile_required$', views.get_profile_required),
|
||||
urls.url(r'^profile_enabled$', views.get_profile_optional),
|
||||
urls.url(r'^admin/', urls.include(admin.site.urls)),
|
||||
urls.url(r'^login', django.contrib.auth.views.login, name="login"),
|
||||
urls.url(r'^oauth2/', urls.include(django_util_site.urls)),
|
||||
]
|
||||
21
samples/django/django_user/myoauth/wsgi.py
Normal file
21
samples/django/django_user/myoauth/wsgi.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myoauth.settings")
|
||||
|
||||
application = get_wsgi_application()
|
||||
0
samples/django/django_user/polls/__init__.py
Normal file
0
samples/django/django_user/polls/__init__.py
Normal file
23
samples/django/django_user/polls/models.py
Normal file
23
samples/django/django_user/polls/models.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
|
||||
from oauth2client.contrib.django_util.models import CredentialsField
|
||||
|
||||
|
||||
class CredentialsModel(models.Model):
|
||||
user_id = models.OneToOneField(User)
|
||||
credential = CredentialsField()
|
||||
@@ -0,0 +1,45 @@
|
||||
<!--
|
||||
# Copyright 2016 Google Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
-->
|
||||
|
||||
{% if form.errors %}
|
||||
<p>Your username and password didn't match. Please try again.</p>
|
||||
{% endif %}
|
||||
|
||||
{% if next %}
|
||||
{% if user.is_authenticated %}
|
||||
<p>Your account doesn't have access to this page. To proceed,
|
||||
please login with an account that has access.</p>
|
||||
{% else %}
|
||||
<p>Please login to see this page.</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<form method="post" action="{% url 'login' %}">
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
<tr>
|
||||
<td>{{ form.username.label_tag }}</td>
|
||||
<td>{{ form.username }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ form.password.label_tag }}</td>
|
||||
<td>{{ form.password }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<input type="submit" value="login" />
|
||||
<input type="hidden" name="next" value="{{ next }}" />
|
||||
</form>
|
||||
41
samples/django/django_user/polls/views.py
Normal file
41
samples/django/django_user/polls/views.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from django.http import HttpResponse
|
||||
|
||||
from oauth2client.contrib.django_util import decorators
|
||||
|
||||
|
||||
def index(request):
|
||||
return HttpResponse("Hello world!")
|
||||
|
||||
|
||||
@decorators.oauth_required
|
||||
def get_profile_required(request):
|
||||
resp, content = request.oauth.http.request(
|
||||
'https://www.googleapis.com/plus/v1/people/me')
|
||||
return HttpResponse(content)
|
||||
|
||||
|
||||
@decorators.oauth_enabled
|
||||
def get_profile_optional(request):
|
||||
if request.oauth.has_credentials():
|
||||
# this could be passed into a view
|
||||
# request.oauth.http is also initialized
|
||||
return HttpResponse('User email: {}'.format(
|
||||
request.oauth.credentials.id_token['email']))
|
||||
else:
|
||||
return HttpResponse(
|
||||
'Here is an OAuth Authorize link:<a href="{}">Authorize</a>'
|
||||
.format(request.oauth.get_authorize_redirect()))
|
||||
3
samples/django/django_user/requirements.txt
Normal file
3
samples/django/django_user/requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Django==1.10.0
|
||||
oauth2client==3.0.0
|
||||
jsonpickle==0.9.3
|
||||
23
samples/django/google_user/manage.py
Executable file
23
samples/django/google_user/manage.py
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2016 Google Inc. All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
import os
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myoauth.settings")
|
||||
|
||||
from django.core.management import execute_from_command_line
|
||||
|
||||
execute_from_command_line(sys.argv)
|
||||
0
samples/django/google_user/myoauth/__init__.py
Normal file
0
samples/django/google_user/myoauth/__init__.py
Normal file
107
samples/django/google_user/myoauth/settings.py
Normal file
107
samples/django/google_user/myoauth/settings.py
Normal file
@@ -0,0 +1,107 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
import os
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
# Quick-start development settings - unsuitable for production
|
||||
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
SECRET_KEY = 'eiw+mvmua#98n@p2xq+c#liz@r2&#-s07nkgz)+$zcl^o4$-$o'
|
||||
|
||||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
|
||||
# Application definition
|
||||
|
||||
INSTALLED_APPS = (
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'polls',
|
||||
'oauth2client.contrib.django_util',
|
||||
)
|
||||
|
||||
MIDDLEWARE_CLASSES = (
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
)
|
||||
|
||||
ROOT_URLCONF = 'myoauth.urls'
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.template.context_processors.debug',
|
||||
'django.template.context_processors.request',
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = 'myoauth.wsgi.application'
|
||||
|
||||
# Database
|
||||
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
}
|
||||
}
|
||||
|
||||
# Internationalization
|
||||
# https://docs.djangoproject.com/en/1.8/topics/i18n/
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
TIME_ZONE = 'UTC'
|
||||
|
||||
USE_I18N = True
|
||||
|
||||
USE_L10N = True
|
||||
|
||||
USE_TZ = True
|
||||
|
||||
# Static files (CSS, JavaScript, Images)
|
||||
# https://docs.djangoproject.com/en/1.8/howto/static-files/
|
||||
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
GOOGLE_OAUTH2_CLIENT_ID = 'YOUR_CLIENT_ID'
|
||||
|
||||
GOOGLE_OAUTH2_CLIENT_SECRET = 'YOUR_CLIENT_SECRET'
|
||||
|
||||
GOOGLE_OAUTH2_SCOPES = (
|
||||
'email', 'profile')
|
||||
26
samples/django/google_user/myoauth/urls.py
Normal file
26
samples/django/google_user/myoauth/urls.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from django.conf import urls
|
||||
from polls import views
|
||||
|
||||
import oauth2client.contrib.django_util.site as django_util_site
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
urls.url(r'^$', views.index),
|
||||
urls.url(r'^profile_required$', views.get_profile_required),
|
||||
urls.url(r'^profile_enabled$', views.get_profile_optional),
|
||||
urls.url(r'^oauth2/', urls.include(django_util_site.urls))
|
||||
]
|
||||
21
samples/django/google_user/myoauth/wsgi.py
Normal file
21
samples/django/google_user/myoauth/wsgi.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myoauth.settings")
|
||||
|
||||
application = get_wsgi_application()
|
||||
0
samples/django/google_user/polls/__init__.py
Normal file
0
samples/django/google_user/polls/__init__.py
Normal file
41
samples/django/google_user/polls/views.py
Normal file
41
samples/django/google_user/polls/views.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# Copyright 2016 Google Inc. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from django import http
|
||||
|
||||
from oauth2client.contrib.django_util import decorators
|
||||
|
||||
|
||||
def index(request):
|
||||
return http.HttpResponse("Hello world!")
|
||||
|
||||
|
||||
@decorators.oauth_required
|
||||
def get_profile_required(request):
|
||||
resp, content = request.oauth.http.request(
|
||||
'https://www.googleapis.com/plus/v1/people/me')
|
||||
return http.HttpResponse(content)
|
||||
|
||||
|
||||
@decorators.oauth_enabled
|
||||
def get_profile_optional(request):
|
||||
if request.oauth.has_credentials():
|
||||
# this could be passed into a view
|
||||
# request.oauth.http is also initialized
|
||||
return http.HttpResponse('User email: {}'.format(
|
||||
request.oauth.credentials.id_token['email']))
|
||||
else:
|
||||
return http.HttpResponse(
|
||||
'Here is an OAuth Authorize link:<a href="{}">Authorize</a>'
|
||||
.format(request.oauth.get_authorize_redirect()))
|
||||
3
samples/django/google_user/requirements.txt
Normal file
3
samples/django/google_user/requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Django==1.10.0
|
||||
oauth2client==3.0.0
|
||||
jsonpickle==0.9.3
|
||||
Reference in New Issue
Block a user