2016-07-04 3 views
0

Django 애플리케이션에서 Facebook 로그인을 사용하려고했습니다. 페이스 북 인증시 페이 스북은 사용자 이름을 다시 전달하는 반면, 사용자 이름, 전자 메일, first_name, last_name 및 프로필 사진을 사용하는 것 외에는 사용자 지정 사용자가 있습니다. 내가 가지고있는 또 다른 문제는 인증 성공시 앱이 원래 URL '#_=_'으로 되돌아갑니다.Django Social Auth access first_name and last_name

가장 큰 문제는 내가 페이스 북 인증에서 필요한 적절한 결과를받는 방법을 모르며 문서가 그것을 커버하지 않는 것입니다.

이 설정 정의

<div id = 'wrapper'><div id = 'shiftlog'> 

<h1>Log In</h1> 
<br> 
<form action="/log_in/" method="post"> 
    {% csrf_token %} 
    {{ form.as_p}} 
    <input type="submit" value="Log In" /> 
</form><br><br> 

<a href='/sign_up/' id = 'signup'>Need an Account?</a> 
<a href="{%url 'socialauth_begin' 'facebook' %}">Login with Facebook</a> 

</div></div> 

models.py

from django.db import models 
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager 
# Create your models here. 

class ActUserManager(BaseUserManager): 
    use_in_migrations = True 

    def create_user(self, email, **extra_fields): 
     """ 
     Creates and saves a User with the given username, email and password. 
     """ 
     print email 
     email = self.normalize_email(email) 
     user = self.model(username=email, **extra_fields) 
     user.save(using=self._db) 
     return user 

class ActiviistUser (AbstractBaseUser): 
    firstname = models.CharField(verbose_name="First Name", max_length=30, default="") 
    lastname = models.CharField(verbose_name="Last Name", max_length=30, default="") 
    username = models.CharField(verbose_name="User Name", max_length=30, default="") 
    is_active = models.BooleanField(default=False) 
    email = models.EmailField(
     verbose_name='Email Address', 
     max_length=255, 
     unique=True, 
     default='' 
    ) 

    USERNAME_FIELD = 'email' 
    objects = ActUserManager() 

답변

0

Settings.py

AUTHENTICATION_BACKENDS = (
     'django.contrib.auth.backends.ModelBackend', 
     'trending.backend.ActiviistUserBackend', 
     'social_auth.backends.facebook.FacebookBackend', 
) 

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'trending', 
    'gunicorn', 
    'cloudinary', 
    'social_auth', 
) 

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email'] 
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = { 
    'fields': 'id,name,email', 
} 

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.social.associate_user', 
    'social_auth.backends.pipeline.social.load_extra_data', 
    'social_auth.backends.pipeline.user.update_user_details', 
    'social_auth.backends.pipeline.user.create_user' 
) 

LOGIN_URL = '/log_in/' 
LOGIN_REDIRECT_URL = '/' 
LOGIN_ERROR_URL = '/log_in/' 
SOCIAL_AUTH_USER_MODEL = 'trending.ActiviistUser' 


MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 

Log_in.html :

SOCIAL_AUTH_FACEBOOK_EXTRA_DATA = ['first_name', 'last_name'] 
Then you can access those values with: 

social = user.social_auth.get(provider='facebook') 
userid = social.uid 
first_name = social.extra_data['first_name'] 
last_name = social.extra_data['last_name'] 
관련 문제