2017-11-09 14 views
0

시나리오 :

가 데이터베이스에 이미하지 않은 경우 사용자가 구글을 통해 로그인을 시도 할 때마다

, 그들은가 다시 리다이렉션 사용자가 아니어야 할 때의 사용자 상태. 사용자가 기존 이메일 주소 (이미 데이터베이스에 있음)를 사용하여 Google을 통해 로그인하려고하면 인증이 잘됩니다. 요청을 통해 사용자가 Google을 통해 인증하고 성공한 경우 (액세스 토큰 및 모든 것을 얻음) 요청은 여전히 ​​익명의 사용자라고 생각합니다.장고 사회 인증은 데이터베이스에 저장 구글 자격 증명을 사용하여 새로운 사용자를 추가하지

Python Social Auth으로 작업하고 이전에는 작동하지만 더 이상 사용하지 않습니다.

코드 :

views.py

def index(request): 
    try: 
     # print(request.user) returns AnonymousUser even after authenticating 
     profile = Profile.objects.get(email=request.user.email) 
     return render(request, 'tablefor2/index-logged-in.html') 
    except: 
     return render(request, 'tablefor2/index-logged-out.html') 

HTML

<a href="{% url "social:begin" "google-oauth2" %}"><button class="save btn btn-default">GET STARTED</button></a> 

settings.py

MIDDLEWARE_CLASSES = [ 
    'django.middleware.security.SecurityMiddleware', 
    'whitenoise.middleware.WhiteNoiseMiddleware', 
    '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', 
] 

ROOT_URLCONF = 'tablefor2.urls' 

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details', 
    'social_core.pipeline.social_auth.social_uid', 
    'social_core.pipeline.social_auth.auth_allowed', 
    'social_core.pipeline.social_auth.social_user', 
    'social_core.pipeline.user.get_username', 
    'social_core.pipeline.social_auth.associate_by_email', 
    'social_core.pipeline.user.create_user', 
    'social_core.pipeline.social_auth.associate_user', 
    'social_core.pipeline.social_auth.load_extra_data', 
    'social_core.pipeline.user.user_details', 
) 

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', 
       'social_django.context_processors.backends', 
       'social_django.context_processors.login_redirect', 
      ], 
      'debug': DEBUG, 
     }, 
    }, 
] 

LOGIN_URL = '/' 
LOGIN_REDIRECT_URL = '/' 

WSGI_APPLICATION = 'tablefor2.wsgi.application' 

SOCIAL_AUTH_ADMIN_USER_SEARCH_FIELDS = ['username', 'first_name', 'email'] 
SOCIAL_AUTH_USER_MODEL = 'tablefor2.Profile' 

AUTHENTICATION_BACKENDS = (
    'social_core.backends.open_id.OpenIdAuth', 
    'social_core.backends.google.GoogleOpenId', 
    'social_core.backends.google.GoogleOAuth2', 
    'social_core.backends.google.GoogleOAuth', 
    'django.contrib.auth.backends.ModelBackend', 
) 

감사합니다!

답변

0

고정! 내 Profile 객체의 is_active 필드가 Default로 설정 되었기 때문에 True가 아닌 False로 설정되어 장고가 최근에 변경된 것처럼 보였습니다.