首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用社交-auth-app-django对所有视图进行身份验证?(所有视图都显示给未经身份验证的用户)

如何使用社交-auth-app-django对所有视图进行身份验证?(所有视图都显示给未经身份验证的用户)
EN

Stack Overflow用户
提问于 2019-12-15 00:10:53
回答 1查看 260关注 0票数 0

我使用的是社交版-auth-app-django版本3.1.0,使用Google OAuth2的登录显然运行良好(我可以成功登录并重定向回来,登录后的用户数据也会被正确保存(用户名、电子邮件))

但是,我的所有路由/视图都可以在没有身份验证的情况下访问,即使使用SocialAuthExceptionMiddleware也是如此(我想它是用来阻止这种未经授权的访问的)。

我只需要我所有的当前视图(路由),以要求身份验证和重定向用户到我的登录页面。

这是我的settings.py

代码语言:javascript
复制
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_jinja',
    'bootstrapform_jinja',
    'django_celery_results',
    'social_django',
    'apps'
]

MIDDLEWARE = [
    'social_django.middleware.SocialAuthExceptionMiddleware',
    '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',
    'wharf.auth.LoginRequiredMiddleware'
]

AUTHENTICATION_BACKENDS = [
    'social_core.backends.google.GoogleOAuth2',
    'wharf.auth.SettingsBackend',
    'django.contrib.auth.backends.ModelBackend'
]

# Social Login Django
SOCIAL_AUTH_POSTGRES_JSONFIELD = True
SOCIAL_AUTH_URL_NAMESPACE = 'social'
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = os.environ.get('SOCIAL_AUTH_GOOGLE_OAUTH2_KEY', '')
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = os.environ.get('SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET', '')
SOCIAL_AUTH_GOOGLE_OAUTH2_USE_UNIQUE_USER_ID = True

SOCIAL_AUTH_STRATEGY = 'social_django.strategy.DjangoStrategy'
SOCIAL_AUTH_STORAGE = 'social_django.models.DjangoStorage'

LOGIN_REDIRECT_URL = "/"
LOGIN_URL = "/"
SESSION_COOKIE_SAMESITE = None
LOGIN_EXEMPT_URLS = ["webhook", "favicon.ico", "status"]

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.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
)

ROOT_URLCONF = 'wharf.urls'

TEMPLATES = [
    {
        'BACKEND': 'django_jinja.backend.Jinja2',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            "match_extension": None,
            "app_dirname": "templates",
        },
    },
]
EN

回答 1

Stack Overflow用户

发布于 2020-10-28 12:19:15

您必须在每个视图中使用来自django.contrib.auth.decoratorsdjango.contrib.auth.decorators

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59340234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档