【问题标题】:Windows authentication with Django and Angular?使用 Django 和 Angular 进行 Windows 身份验证?
【发布时间】:2019-01-25 13:11:28
【问题描述】:

我正在尝试使用 Angular、Django、IIS 服务器实现单点登录。

在 IIS windows 中启用身份验证。

角度拦截器代码:

intercept(req: HttpRequest<any>, next: HttpHandler):Observable<HttpEvent<any>> {   
 console.log("in intercept")   
 req = req.clone({  
 withCredentials: true });    
return next.handle(req);  }

姜戈settings.py:

MIDDLEWARE = [    
'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'corsheaders.middleware.CorsMiddleware',    'django.middleware.common.CommonMiddleware',    'django.middleware.csrf.CsrfViewMiddleware',    'django.contrib.auth.middleware.AuthenticationMiddleware',    'django.contrib.auth.middleware.RemoteUserMiddleware',    'django.contrib.messages.middleware.MessageMiddleware',    'django.middleware.clickjacking.XFrameOptionsMiddleware',]

AUTHENTICATION_BACKENDS = (    'django.contrib.auth.backends.RemoteUserBackend',)

CORS_ORIGIN_ALLOW_ALL = True

ALLOWED_HOSTS = ["*"]

出现错误: (IP 地址)已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

【问题讨论】:

    标签: django angular cors windows-authentication iis-8


    【解决方案1】:

    在 settings.py 中试试这个配置

    CORS_ORIGIN_ALLOW_ALL = 真 CORS_ALLOW_CREDENTIALS = 真

    CORS_ALLOW_CREDENTIALS = True # 使用 withCredentials 时需要此项:true

    【讨论】:

      【解决方案2】:

      问题在于 Django 设置,请查看此链接:https://stackoverflow.com/a/38162454/4587598

      如果第一次尝试不起作用,请删除所有 settings.py 并从头开始设置,首先检查是否没有出现 CORS 问题,然后添加身份验证复杂性。

      【讨论】:

        【解决方案3】:

        试试django-cors-headers pip install django-cors-headers

        然后设置 在你的settings.py

        INSTALLED_APPS = (
            ...
            'corsheaders',
            ...
        )
        

        您还需要添加一个中间件类来监听响应:

        MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
            ...
            'corsheaders.middleware.CorsMiddleware',
            'django.middleware.common.CommonMiddleware',
            ...
        ]
        

        CorsMiddleware 应该放在尽可能高的位置,尤其是在任何可以生成响应的中间件之前,例如 Django 的 CommonMiddleware

        CORS_ORIGIN_ALLOW_ALL = True
        

        【讨论】:

          猜你喜欢
          • 2017-11-01
          • 2017-03-15
          • 2017-12-05
          • 2017-04-17
          • 2017-06-08
          • 2017-11-25
          • 1970-01-01
          • 2010-10-28
          • 2016-03-13
          相关资源
          最近更新 更多