首页 > 解决方案 > Flask-Login 使用 Radius

问题描述

我正在尝试在用户数据库位于 RADIUS 服务器上的位置设置 Flask-Login。我可以很好地验证凭据,但大多数在线示例都使用 SQLAlchemy。如果我没有为 Flask 使用我自己的数据库,我还需要使用 SQLAlchemy 吗?

运行 User(Mixin) 类时出现错误。

AttributeError: 'str' object has no attribute 'is_active'

我的用户类很简单,因为我不需要自己的数据库,只需要文档中的 4 种方法。

class User(UserMixin):
    pass

这是一些仅使用字典作为数据库来尝试此操作的代码:

from flask import Flask, url_for, render_template, redirect
from forms import LoginForm
from flask_login import LoginManager, UserMixin, login_required, login_user

users_db = {'user1': 'pass1'}

app = Flask(__name__)
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
    if user_id in users_db:
        print('user found in DB')
        return user_id
    else:
        return None

class User(UserMixin):
    pass


app.config['SECRET_KEY'] = 'abc123'


@app.route('/', methods=('GET', 'POST'))
def Login():
    form = LoginForm()
    if form.validate_on_submit():
        print('validated')
        username = form.username.data
        login_user(username)
        next = flask.request.args.get('next')
        if not is_safe_url(next):
            return flask.abort(400)
        return flask.redirect(next or flask.url_for('hi'))
    return render_template('login.html', form=form)


@app.route('/hi')
def hi():
    return """<h1>Hi</h1>
           {% if current_user.is_authenticated %}
               Hi {{ current_user.name }}!
           {% endif %}"""    

@app.route('/secure')
@login_required
def secure():
    return "This is a secure page."  

@app.route("/logout")
@login_required
def logout():
    logout_user()
    return redirect('https://cisco.com')          

这里有什么明显的错误,或者我在概念上不理解什么?谢谢!!!

标签: python-3.xflaskflask-wtformsflask-login

解决方案


您的 user_db 仅包含字符串。您必须创建 User 类的实例并在登录时返回该实例。

https://flask-login.readthedocs.io/en/latest/

PS我在手机上,如果这还不够信息,我稍后会更新我的答案。

本文还介绍了登录机制 https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins


推荐阅读