LINUX.ORG.RU

История изменений

Исправление constin, (текущая версия) :

про ldap с UserMixin, поподробней.

как-то так:

models.py

import flask_login
from flask_ldap3_login import LDAP3LoginManager
from flask_login import LoginManager, login_user, UserMixin, current_user
from flask_ldap3_login.forms import LDAPLoginForm
...


class User(UserMixin):
    def __init__(self, dn, username, data):
        self.dn = dn
        self.username = username
        self.data = data
        self.displayName = data['displayName']
        user_email = username[0] + '.' + username[1:] + '@' + app.config.get('EMAIL_DOMAIN')
        self.mail = user_email

    def __repr__(self):
        return self.dn

    def get_id(self):
        return self.dn


@login_manager.user_loader
def load_user(id):
    if id in users:
        return users[id]
    return None


@ldap_manager.save_user
def save_user(dn, username, data, memberships):
    if data.get("memberOf"):
        #if current_app.config.get('ACCESS_GROUP') in data.get("memberOf"):
        if app.config['ACCESS_GROUP'] in data.get("memberOf"):
            user = User(dn, username, data)
            users[dn] = user
            return user

....

__init.py__



from flask import Flask
from flask_ldap3_login import LDAP3LoginManager
from flask_login import LoginManager


app = Flask(__name__)

....

app.config['LDAP_HOST'] = 'xxxx.xxxx.xxxx'
app.config['LDAP_PORT'] = 636
app.config['LDAP_BASE_DN'] = 'dc=xxxx,dc=xxx'
app.config['LDAP_USER_DN'] = 'cn=Users'
app.config['LDAP_GROUP_DN'] = 'cn=Groups'
app.config['LDAP_USER_RDN_ATTR'] = 'cn'
app.config['LDAP_USER_LOGIN_ATTR'] = 'cn'
app.config['LDAP_BIND_USER_DN'] = 'cn=ldapsearch,cn=users,dc=xxxxx,dc=xxxx'
app.config['LDAP_GROUP_OBJECT_FILTER'] ='(objectclass=group)'
app.config['LDAP_BIND_USER_PASSWORD'] = 'xxxxxx'
app.config['LDAP_USE_SSL'] = True

login_manager = LoginManager(app)             
ldap_manager = LDAP3LoginManager(app) 

...

router.py


....

@app.route("/logout")
@flask_login.login_required
def logout():
    flask_login.logout_user()
    return redirect('/login')


@app.route('/login', methods=['GET', 'POST'])
def login():
    login_form = LDAPLoginForm()

    if login_form.validate_on_submit():
        # Successfully logged in, We can now access the saved user object
        # via form.user.
        if login_form.user:
            login_user(login_form.user)
            return redirect('/newuser') 
        #login_user(form.user)  # Tell flask-login to log them in.
        else:
            flash('Login Failed', 'warning')
            return redirect('login')
        return redirect('/') 

    return render_template('login.html', login_form=login_form)

Исходная версия constin, :

про ldap с UserMixin, поподробней.

как-то так:

models.py

import flask_login
from flask_ldap3_login import LDAP3LoginManager
from flask_login import LoginManager, login_user, UserMixin, current_user
from flask_ldap3_login.forms import LDAPLoginForm
...


class User(UserMixin):
    def __init__(self, dn, username, data):
        self.dn = dn
        self.username = username
        self.data = data
        self.displayName = data['displayName']
        user_email = username[0] + '.' + username[1:] + '@' + app.config.get('EMAIL_DOMAIN')
        self.mail = user_email

    def __repr__(self):
        return self.dn

    def get_id(self):
        return self.dn


@login_manager.user_loader
def load_user(id):
    if id in users:
        return users[id]
    return None


@ldap_manager.save_user
def save_user(dn, username, data, memberships):
    if data.get("memberOf"):
        #if current_app.config.get('ACCESS_GROUP') in data.get("memberOf"):
        if app.config['ACCESS_GROUP'] in data.get("memberOf"):
            user = User(dn, username, data)
            users[dn] = user
            return user

....

__init.py__


from flask import Flask from flask_ldap3_login import LDAP3LoginManager from flask_login import LoginManager

app = Flask(__name__)

....

app.config['LDAP_HOST'] = 'xxxx.xxxx.xxxx' app.config['LDAP_PORT'] = 636 app.config['LDAP_BASE_DN'] = 'dc=xxxx,dc=xxx' app.config['LDAP_USER_DN'] = 'cn=Users' app.config['LDAP_GROUP_DN'] = 'cn=Groups' app.config['LDAP_USER_RDN_ATTR'] = 'cn' app.config['LDAP_USER_LOGIN_ATTR'] = 'cn' app.config['LDAP_BIND_USER_DN'] = 'cn=ldapsearch,cn=users,dc=xxxxx,dc=xxxx' app.config['LDAP_GROUP_OBJECT_FILTER'] ='(objectclass=group)' app.config['LDAP_BIND_USER_PASSWORD'] = 'xxxxxx' app.config['LDAP_USE_SSL'] = True

login_manager = LoginManager(app) ldap_manager = LDAP3LoginManager(app)

...

router.py


....

@app.route("/logout")
@flask_login.login_required
def logout():
    flask_login.logout_user()
    return redirect('/login')


@app.route('/login', methods=['GET', 'POST'])
def login():
    login_form = LDAPLoginForm()

    if login_form.validate_on_submit():
        # Successfully logged in, We can now access the saved user object
        # via form.user.
        if login_form.user:
            login_user(login_form.user)
            return redirect('/newuser') 
        #login_user(form.user)  # Tell flask-login to log them in.
        else:
            flash('Login Failed', 'warning')
            return redirect('login')
        return redirect('/') 

    return render_template('login.html', login_form=login_form)