Flask ldap3 для входа и OpenLDAP - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь использовать ldap3 для проверки пользователей при входе в мое приложение фляги. Я пробовал каждый параметр конфигурации LDAP, доступный в ldap3 в последние дни, но я не могу заставить его работать. Я уже получаю правильную проверку не удалось вернуть из openldap, когда я вхожу как несуществующий пользователь. Но если я использую существующего пользователя, я также получаю возвращенный результат проверки в сочетании с несколькими другими сообщениями об ошибках в зависимости от настроек конфигурации, которые я пробовал. Любая помощь будет оценена.

class Config(object):
    ...
    LDAP_HOST = 'xxx'
    LDAP_BASE_DN = 'xxx'
    LDAP_PORT = 7389
    LDAP_USER_DN = 'cn=users'
    LDAP_GROUP_DN = 'ou=groups'
    LDAP_USER_RDN_ATTR = 'uid'
    LDAP_USER_LOGIN_ATTR = 'uid'
    LDAP_BIND_USER_DN = 'uid'
    LDAP_BIND_USER_PASSWORD = 'pwd'


class User(UserMixin,db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    dn = db.Column(db.String(128), index=True)

    def __repr__(self):
        return '<User {}>'.format(self.username)


@login_manager.user_loader
def load_user(user_id):
    return User.query.filter_by(id=user_id).first()

@ldap_manager.save_user
def save_user(dn, username, data, memberships):
    user_id=int(data.get("uidNumber"))

    user=User.query.filter_by(id=user_id).first()
    if not user:
        user=User(
            id=int(user_id),
            username=username,
            dn=dn
        )
        db.session.add(user)
        db.session.commit()

    return user

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LDAPLoginForm()
    if form.validate_on_submit():
        print('Valid')
        login_user(form.user)
        return redirect(url_for('index'))
    else:
        print('Invalid')
    return render_template('login.html', title='Sign In', form=form)

@app.route('/logout')
@login_required
def logout():
    db.session.delete(current_user)
    db.session.commit()
    logout_user()
    return redirect(url_for('login'))
...