Python 在烧瓶上运行pyad.adgroup时出现pywintypes.com错误

Python 在烧瓶上运行pyad.adgroup时出现pywintypes.com错误,python,flask,adgroup,Python,Flask,Adgroup,我正在用Python 3.5.2创建一个简单的应用程序,它通过Active Directory对用户进行身份验证,并根据用户的组成员资格应用其他规则。应用程序可以使用win32security包成功验证用户身份,并尝试使用pyad获取组成员信息 我的问题:在Flask应用程序上运行代码时,我收到一条pywintypes.com_错误消息,阻止我获取组成员信息。 当我在iPython控制台上单独运行后端代码时,它工作得很好。我可以查询组成员资格。但是,当它是Flask应用程序的一部分时,会弹出一个

我正在用Python 3.5.2创建一个简单的应用程序,它通过Active Directory对用户进行身份验证,并根据用户的组成员资格应用其他规则。应用程序可以使用
win32security
包成功验证用户身份,并尝试使用
pyad
获取组成员信息

我的问题:在Flask应用程序上运行代码时,我收到一条pywintypes.com_错误消息,阻止我获取组成员信息。

当我在iPython控制台上单独运行后端代码时,它工作得很好。我可以查询组成员资格。但是,当它是Flask应用程序的一部分时,会弹出一个错误。我已将问题隔离到代码的这一部分(DN信息屏蔽):

以前有人遇到过这种情况吗?我想不出为什么代码不会在Flask中运行(虽然我刚刚开始学习Flask),但它会在控制台中运行

代码参考:

我的Flask应用程序有3个Python文件,templates文件夹中有一个html文件

run.py

from app import app
import os

app.secret_key = os.urandom(16)
app.run(debug=True)
init.py

from flask import Flask

app = Flask(__name__)
from app import views
views.py

from app import app
from flask import Flask, flash, render_template, request, session

import win32security as win32
from pyad import adgroup

@app.route("/")
def home():
    if not session.get("logged_in"):
        return render_template("login.html")
    else:
        return "You are currently logged in."

@app.route("/login", methods=["GET","POST"])
def login():
    #initialize variables
    username = request.form["username"]
    password = request.form["password"]
    DOMAIN = "test.domain.com.somecountry"
    error = None

    group = adgroup.ADGroup.from_dn('CN=someCN,OU=someOU1,OU=someOU2,DC=test,DC=domain,DC=com,DC=somecountry')
    group_members = sum([member.get_attribute("sAMAccountName") for member in group.get_members()],[])

    if username in group_members:
        try:
            token = win32.LogonUser(username, DOMAIN, password,
                                    win32.LOGON32_LOGON_NETWORK,
                                    win32.LOGON32_PROVIDER_DEFAULT)
            is_auth = bool(token)

            if is_auth:
                session["logged_in"] = True
        except:
            error = "Incorrect credentials. Please try again."
    else:
        error = "You are not permitted to access this."

    return render_template("login.html", error=error)
login.html

<!doctype html>
<title>Login Test</title>
{% block body %}
{% if session["logged_in"] %}
<p>You are currently logged in.</p>
{% else %}
<form action="/login" method="POST">
    <input type="username" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" value="Log In">
</form>
<li>{{error}}</li>
{% endif %}
{% endblock %}

登录测试
{%block body%}
{%if会话[“已登录”]%}
您当前已登录

{%else%}
  • {{error}}
  • {%endif%} {%endblock%}
    这是错误回溯:

    Traceback (most recent call last):
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 2000, in __call__
    return self.wsgi_app(environ, start_response)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1991, in wsgi_app
    response = self.make_response(self.handle_exception(e))
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1567, in handle_exception
    reraise(exc_type, exc_value, tb)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1625, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
    File "C:\Users\user\Documents\test\app\views.py", line 23, in login
    group = adgroup.ADGroup.from_dn('CN=someCN,OU=someOU1,OU=someOU2,DC=test,DC=domain,DC=com,DC=somecountry')
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyad\adobject.py", line 131, in from_dn
    return cls(distinguished_name, None, options)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyad\adobject.py", line 88, in __init__
    self.__set_adsi_obj()
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyad\adobject.py", line 76, in __set_adsi_obj
    self._ldap_adsi_obj = self.adsi_provider.getObject('', self.__ads_path)
    File "<COMObject ADsNameSpaces>", line 2, in getObject
    
    pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147221020), None)
    
    回溯(最近一次呼叫最后一次):
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\app.py”,第2000行,在调用中__
    返回self.wsgi_应用程序(环境,启动响应)
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\app.py”,第1991行,在wsgi\U应用程序中
    响应=self.make\u响应(self.handle\u异常(e))
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\app.py”,第1567行,在句柄\u异常中
    重放(exc_类型、exc_值、tb)
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\\u compat.py”,第33行,重新放置
    增值
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\app.py”,第1988行,在wsgi\U应用程序中
    response=self.full\u dispatch\u request()
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\app.py”,第1641行,完全发送请求
    rv=自身处理用户异常(e)
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\app.py”,第1544行,在handle\u user\u exception中
    重放(exc_类型、exc_值、tb)
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\\u compat.py”,第33行,重新放置
    增值
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\app.py”,第1639行,完全发送请求
    rv=自我分派请求()
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\flask\app.py”,第1625行,在调度请求中
    返回self.view_函数[rule.endpoint](**req.view_参数)
    文件“C:\Users\user\Documents\test\app\views.py”,第23行,登录
    group=adgroup.adgroup.from_dn('CN=someCN,OU=someOU1,OU=someOU2,DC=test,DC=domain,DC=com,DC=somecountry'))
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\pyad\adobject.py”,第131行,from\u dn
    返回cls(可分辨名称、无、选项)
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\pyad\adobject.py”,第88行,在uu init中__
    self.\u set\u adsi\u obj()
    文件“C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site packages\pyad\adobject.py”,第76行,位于adsi\U obj中
    self.\u ldap\u adsi\u obj=self.adsi\u provider.getObject(“”,self.\u ads\u path)
    getObject中第2行的文件“”
    pywintypes.com_错误:(-2147352567,‘发生异常’,(0,无,无,无,0,-2147221020),无)
    
    通过在python2 32位环境中运行相同的代码,我能够减轻这个错误

    不确定这是否是一种选择,但值得一试

    Traceback (most recent call last):
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 2000, in __call__
    return self.wsgi_app(environ, start_response)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1991, in wsgi_app
    response = self.make_response(self.handle_exception(e))
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1567, in handle_exception
    reraise(exc_type, exc_value, tb)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1625, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
    File "C:\Users\user\Documents\test\app\views.py", line 23, in login
    group = adgroup.ADGroup.from_dn('CN=someCN,OU=someOU1,OU=someOU2,DC=test,DC=domain,DC=com,DC=somecountry')
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyad\adobject.py", line 131, in from_dn
    return cls(distinguished_name, None, options)
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyad\adobject.py", line 88, in __init__
    self.__set_adsi_obj()
    File "C:\Users\user\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyad\adobject.py", line 76, in __set_adsi_obj
    self._ldap_adsi_obj = self.adsi_provider.getObject('', self.__ads_path)
    File "<COMObject ADsNameSpaces>", line 2, in getObject
    
    pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147221020), None)