Je cherche à permettre aux utilisateurs de se connecter à mon application Web soit en créant un profil (fait par django.contrib.auth
), ou en utilisant LinkedIn (fait par python-social-auth
).Authentification avec Linkedin en utilisant python-social-auth
hiérarchie des fichiers pertinente est la suivante:
.
├── ./app
│ ├── ./app/admin.py
│ ├── ./app/forms.py
│ ├── ./app/__init__.py
│ ├── ./app/models.py
│ ├── ./app/serializers.py
│ ├── ./app/templates
│ │ ├── ./app/templates/app
│ │ │ ├── ./app/templates/app/app.js
│ │ │ ├── ./app/templates/app/create_profile.html
│ │ │ ├── ./app/templates/app/index.html
│ │ │ ├── ./app/templates/app/login.html
│ │ │ ├── ./app/templates/app/profile.html
│ │ │ ├── ./app/templates/app/signup.html
│ │ │ └── ./app/templates/app/userhome.html
│ ├── ./app/tests.py
│ ├── ./app/urls.py
│ ├── ./app/views.py
├── ./proj
│ ├── ./proj/settings.py
│ ├── ./proj/urls.py
│ ├── ./proj/wsgi.py
└── ./manage.py
Jusqu'à présent, je l'ai ajouté les entrées suivantes dans mon settings.py
:
INSTALLED_APPS = (
'django.contrib.auth',
# Entries for other purposes...
# ...
# ...
'social.apps.django_app.default'
)
AUTHENTICATION_BACKENDS = (
'social.backends.linkedin.LinkedinOAuth',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_LINKEDIN_KEY = '*secret*'
SOCIAL_AUTH_LINKEDIN_SECRET = '*secret*'
SOCIAL_AUTH_LINKEDIN_SCOPE = [ 'r_basicprofile' ]
LOGIN_REDIRECT_URL = '/userhome'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# Entries for other purposes...
# ...
# ...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
],
'debug': DEBUG,
},
},]
En proj/urls.py
, j'ai ajouté l'entrée suivante:
url('', include('social.apps.django_app.urls', namespace='social')),
Sur ma page login.html
, j'ai ajouté un lien:
<br>Or, <a href="/login/linkedin">sign in with LinkedIn.</a>
Mon point de vue de la connexion à app/views.py
ressemble à ceci:
def login (request):
form = LoginForm()
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
auth_login(request, user)
return redirect('/userhome/')
else:
messages.error(request, 'Invalid login or password')
else:
messages.error(request, 'Missing username or password')
return render(request, 'app/login.html', {'form': form})
Actuellement, mon "Connexion avec LinkedIn" lien ne être pris en charge par le backend python-social-auth
. Comme indiqué dans this tutorial, j'ai confirmé que le backend de python-social-auth
fonctionne: Je peux voir des tables vides sur la page d'administration du site.
J'ai lu les tutoriels suivants ou SO entrées pour essayer de répondre à ma question:
- Using python-social-auth with linkedin
- Python Social Auth Django template example
- https://python-social-auth.readthedocs.io/en/latest/configuration/django.html
- https://github.com/omab/python-social-auth/blob/master/examples/django_example/example/settings.py
Toute idée de ce que Je suis manquant?
Vous avez sauvé ma vie homme, merci!'FIELD_SELECTORS = ['email-address',]' fonctionne comme un charme! –