IM Ecrire une application Facebook-Connect qui connecte l'utilisateur après authentification de session sur Facebook, la question est de savoir comment puis-je authentifier l'utilisateur sur Django après avoir obtenu l'objet utilisateur? existe une autre façon d'y parvenir? p> p>
3 Réponses :
authentifier () code> et login () code> chacun fournit différentes tâches, et les deux (ou l'équivalent tiré du code Django et mis à jour pour chaque version de Django em>) sont nécessaires pour enregistrer un utilisateur dans. P>
Il y a deux choses que vous devriez examiner et être consciente de votre question et de votre exemple. P>
Tout d'abord, la façon dont vous gérez des méthodes d'authentification alternatives (par exemple, Facebook OAuth) sont Backends d'authentification . Vous pouvez regarder djangopackages.com pour des options existantes ou écrire le vôtre. Le (s) backend (s) que vous avez configuré est ce qui définira quels paramètres Deuxièmement, faire de l'utilisateur.Password ne vous obtiendra pas le mot de passe réel de l'utilisateur. En tant que mesure de sécurité, Django stocke des mots de passe comme hachage à sens unique salé . Cela signifie que, par conception, vous ne pouvez pas déterminer le mot de passe d'un utilisateur en fonction de ce qui est stocké dans la base de données. P> authentifier () code> s'attendent à recevoir (par exemple, un backend Facebook ne s'attendrait pas à un mot de passe comme mot de passe n'a pas de sens dans ce contexte ). p>
Vous n'avez pas vraiment besoin d'authentifier () d'abord si vous faites cela (mais je ne vous ai pas dit!): p>
user.backend = 'django.contrib.auth.backend.modelbackend' code> p>
Connexion (demande, utilisateur) code> p>
Pas que je sache de. Juste Trixie!
Si le seul endroit à vous connecter dans votre application est la vue où vous le faites alors ce n'est pas trop mauvais. Si vous souhaitez que la page de connexion d'administrateur ou toute autre utilisation du système d'authentification Django fonctionne, vous devez utiliser un backend d'authentification.
Connexion (demande, utilisateur, backend = 'django.contrib.auth.backend.modelbackend') code> fonctionne aussi.