2017-12-29 12 views
0

私はdjango social authの初心者です。私はsocial-auth-app-djangoを使用してMicrosoft Azure ADユーザーを認証しています。認証プロセスは正常に機能し、ユーザーオブジェクトはデータベース内に作成されます。しかし、request.userはビュー内でnullをreturingしています。私は管理者または管理者を使用して作成し、他のユーザーとしてログインするときrequest.user returns Django social-auth-app-django

Settings.py

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'social_django', 
    # 'social.apps.django_app.default', 
] 

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'social_django.middleware.SocialAuthExceptionMiddleware', 
] 
TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR, 'templates'),], 
     '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.apps.django_app.context_processors.backends', 
       'social.apps.django_app.context_processors.login_redirect', 

      ], 
     }, 
    }, 
] 
AUTHENTICATION_BACKENDS = (
    'social.backends.azuread.AzureADOAuth2', 
) 
#settings.py 
SOCIAL_AUTH_PIPELINE = { 
    'pipeline.new_users_handler' 
} 

ビュー

def home(request): 
    """Renders the home page.""" 
    assert isinstance(request, HttpRequest) 

    context = { 
     'title':'Home Page', 
     'year':datetime.now().year, 
     'request': request, 
     'user': request.user, 
    } 
    context_instance = RequestContext(request,context) 
    return render(
    request, 
    'index.html',context) 

からrequest.userは正常に動作します。ソーシャル認証で認証されたときの問題です。

答えて

1

は、ユーザーが最後

'social_django.middleware.SocialAuthExceptionMiddleware', 
でミドルウェアにこれを追加し

にログインしていないまで

def home(request): 
    context = { 
     'title':'Home Page', 
     'year':datetime.now().year, 
     'request': request, 
     'user': request.user, 
    } 
    return render(
    request, 
    'index.html',context) 

しかしrequest.userはnullを返します単純な構文を使用して、このすべてを必要といけません

これをテンプレートの最後に追加するコンテキストプロセッサ

'social_django.context_processors.backends', # <-- 
'social_django.context_processors.login_redirect', # <-- 
+0

Azureで認証しても、request.userはまだありません。 –

+1

編集済みのansを確認してください – Exprator

+0

私はすでに2つのコンテキストプロセッサを追加しています。ミドルウェア ''social_django.middleware.SocialAuthExceptionMiddleware'を追加しました。 –

関連する問題