Add Oauth support (with django-social-auth)
This commit is contained in:
parent
6346cddf2b
commit
1409f17979
10 changed files with 87 additions and 5 deletions
18
README.rst
18
README.rst
|
@ -40,6 +40,23 @@ Add database connexion informations in `local.py`, for example::
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uMap uses `django-social-auth <http://django-social-auth.readthedocs.org/>`_ for user authentication. So you will need to configure it according to your
|
||||||
|
needs. For example::
|
||||||
|
|
||||||
|
AUTHENTICATION_BACKENDS = (
|
||||||
|
'social_auth.backends.contrib.github.GithubBackend',
|
||||||
|
'social_auth.backends.contrib.bitbucket.BitbucketBackend',
|
||||||
|
'social_auth.backends.twitter.TwitterBackend',
|
||||||
|
'django.contrib.auth.backends.ModelBackend',
|
||||||
|
)
|
||||||
|
GITHUB_APP_ID = 'xxx'
|
||||||
|
GITHUB_API_SECRET = 'zzz'
|
||||||
|
BITBUCKET_CONSUMER_KEY = 'xxx'
|
||||||
|
BITBUCKET_CONSUMER_SECRET = 'zzz'
|
||||||
|
TWITTER_CONSUMER_KEY = "xxx"
|
||||||
|
TWITTER_CONSUMER_SECRET = "yyy"
|
||||||
|
|
||||||
|
|
||||||
Create the tables::
|
Create the tables::
|
||||||
|
|
||||||
python manage.py syncdb --migrate
|
python manage.py syncdb --migrate
|
||||||
|
@ -56,4 +73,3 @@ Go to the admin (http://localhost:8000/admin/) and add:
|
||||||
|
|
||||||
- almost one licence
|
- almost one licence
|
||||||
- almost one tilelayer
|
- almost one tilelayer
|
||||||
- maybe some users to play with
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ south
|
||||||
django-leaflet-storage
|
django-leaflet-storage
|
||||||
django_compressor
|
django_compressor
|
||||||
django-foundation
|
django-foundation
|
||||||
|
django-social-auth
|
||||||
git+git://github.com/yohanboniface/vectorformats.git@leafletstorage
|
git+git://github.com/yohanboniface/vectorformats.git@leafletstorage
|
||||||
git+git://github.com/frankban/django-endless-pagination.git
|
git+git://github.com/frankban/django-endless-pagination.git
|
||||||
hg+https://bitbucket.org/liberation/sesql
|
hg+https://bitbucket.org/liberation/sesql
|
|
@ -3,6 +3,7 @@
|
||||||
"""Base settings shared by all environments"""
|
"""Base settings shared by all environments"""
|
||||||
# Import global settings to make it easier to extend settings.
|
# Import global settings to make it easier to extend settings.
|
||||||
from django.conf.global_settings import * # pylint: disable=W0614,W0401
|
from django.conf.global_settings import * # pylint: disable=W0614,W0401
|
||||||
|
from django.template.defaultfilters import slugify
|
||||||
|
|
||||||
#==============================================================================
|
#==============================================================================
|
||||||
# Generic Django project settings
|
# Generic Django project settings
|
||||||
|
@ -34,6 +35,7 @@ INSTALLED_APPS = (
|
||||||
'umap',
|
'umap',
|
||||||
'sesql',
|
'sesql',
|
||||||
'compressor',
|
'compressor',
|
||||||
|
'social_auth',
|
||||||
|
|
||||||
'south',
|
'south',
|
||||||
|
|
||||||
|
@ -113,6 +115,7 @@ TEMPLATE_DIRS = (
|
||||||
|
|
||||||
TEMPLATE_CONTEXT_PROCESSORS += (
|
TEMPLATE_CONTEXT_PROCESSORS += (
|
||||||
'django.core.context_processors.request',
|
'django.core.context_processors.request',
|
||||||
|
'social_auth.context_processors.social_auth_backends',
|
||||||
)
|
)
|
||||||
|
|
||||||
#==============================================================================
|
#==============================================================================
|
||||||
|
@ -139,3 +142,19 @@ AUTHENTICATION_BACKENDS += (
|
||||||
#==============================================================================
|
#==============================================================================
|
||||||
COMPRESS_ENABLED = True
|
COMPRESS_ENABLED = True
|
||||||
COMPRESS_OFFLINE = True
|
COMPRESS_OFFLINE = True
|
||||||
|
|
||||||
|
SOCIAL_AUTH_ASSOCIATE_URL_NAME = "associate_complete"
|
||||||
|
SOCIAL_AUTH_DEFAULT_USERNAME = lambda u: slugify(u)
|
||||||
|
SOCIAL_AUTH_EXTRA_DATA = False
|
||||||
|
SOCIAL_AUTH_ASSOCIATE_BY_EMAIL = True
|
||||||
|
LOGIN_URL = "login"
|
||||||
|
SOCIAL_AUTH_LOGIN_REDIRECT_URL = "/login/popup/end/"
|
||||||
|
SOCIAL_AUTH_PIPELINE = (
|
||||||
|
'social_auth.backends.pipeline.social.social_auth_user',
|
||||||
|
'social_auth.backends.pipeline.associate.associate_by_email',
|
||||||
|
'social_auth.backends.pipeline.user.get_username',
|
||||||
|
'social_auth.backends.pipeline.user.create_user',
|
||||||
|
'social_auth.backends.pipeline.social.associate_user',
|
||||||
|
'social_auth.backends.pipeline.social.load_extra_data',
|
||||||
|
'social_auth.backends.pipeline.user.update_user_details'
|
||||||
|
)
|
||||||
|
|
BIN
umap/static/umap/bitbucket.png
Normal file
BIN
umap/static/umap/bitbucket.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.9 KiB |
BIN
umap/static/umap/github.png
Normal file
BIN
umap/static/umap/github.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
BIN
umap/static/umap/twitter.png
Normal file
BIN
umap/static/umap/twitter.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
|
@ -87,4 +87,32 @@ input:-moz-placeholder, :-moz-placeholder {
|
||||||
height: 16px;
|
height: 16px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
border: 1px solid #000;
|
border: 1px solid #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* **************** */
|
||||||
|
/* Login icons */
|
||||||
|
/* **************** */
|
||||||
|
/*.login-grid li {
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
.login-grid a {
|
||||||
|
border: 1px solid #e5e5e5;
|
||||||
|
padding: 5px;
|
||||||
|
color: #000;
|
||||||
|
background-position: center bottom;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 92px 92px;
|
||||||
|
height: 92px;
|
||||||
|
width: 92px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.login-grid .login-github {
|
||||||
|
background-image: url("./github.png");
|
||||||
|
}
|
||||||
|
.login-grid .login-bitbucket {
|
||||||
|
background-image: url("./bitbucket.png");
|
||||||
|
}
|
||||||
|
.login-grid .login-twitter {
|
||||||
|
background-image: url("./twitter.png");
|
||||||
}
|
}
|
14
umap/templates/registration/login.html
Normal file
14
umap/templates/registration/login.html
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{% load i18n %}
|
||||||
|
{% load url from future %}
|
||||||
|
|
||||||
|
<h5>{% trans "Please choose a provider" %}</h5>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul class="login-grid block-grid">
|
||||||
|
{% for name in social_auth.backends %}
|
||||||
|
<li>
|
||||||
|
<a rel="nofollow" href="{% url "socialauth_begin" name %}" class="storage-login-popup login-{{ name }}" title="{{ name|title }}"></a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
|
@ -68,11 +68,14 @@
|
||||||
<strong>{% trans "Fork it" %}</strong>
|
<strong>{% trans "Fork it" %}</strong>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<div class="panel">
|
|
||||||
<p>
|
{% if not user.is_authenticated %}
|
||||||
{% trans "Users to play with" %} (password: <span class="label">123123</span>): {% for u in users %}<a href="{% url user_maps u.username %}">{{ u }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}
|
<a href="{% url login %}" class="login_button">
|
||||||
</p>
|
<div class="panel radius callout" align="center">
|
||||||
|
<strong>{% trans "Log in" %} / {% trans "Sign in" %}</strong>
|
||||||
</div>
|
</div>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ urlpatterns = patterns('',
|
||||||
url(r'^$', views.home, name="home"),
|
url(r'^$', views.home, name="home"),
|
||||||
url(r'^search/$', views.search, name="search"),
|
url(r'^search/$', views.search, name="search"),
|
||||||
url(r'^user/(?P<username>[-_\w]+)/$', views.user_maps, name='user_maps'),
|
url(r'^user/(?P<username>[-_\w]+)/$', views.user_maps, name='user_maps'),
|
||||||
|
url(r'', include('social_auth.urls')),
|
||||||
(r'', include('leaflet_storage.urls')),
|
(r'', include('leaflet_storage.urls')),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue