Python 3.x 使用Radius登录

Python 3.x 使用Radius登录,python-3.x,flask,flask-wtforms,flask-login,Python 3.x,Flask,Flask Wtforms,Flask Login,我正在尝试设置Flask登录,其中用户数据库位于RADIUS服务器上。 我可以根据它来验证凭证,但大多数在线示例都使用SQLAlchemy。如果我没有使用自己的数据库来创建Flask,我还需要使用SQLAlchemy吗 当运行User(Mixin)类时,我遇到了错误 AttributeError:'str'对象没有属性'is\u active' 我的用户类很简单,因为我不需要自己的DB,只需要文档中的4个方法 class User(UserMixin): pass 下面是一些代码,用于

我正在尝试设置Flask登录,其中用户数据库位于RADIUS服务器上。 我可以根据它来验证凭证,但大多数在线示例都使用SQLAlchemy。如果我没有使用自己的数据库来创建Flask,我还需要使用SQLAlchemy吗

当运行User(Mixin)类时,我遇到了错误

AttributeError:'str'对象没有属性'is\u active'

我的用户类很简单,因为我不需要自己的DB,只需要文档中的4个方法

class User(UserMixin):
    pass
下面是一些代码,用于仅使用字典作为DB来尝试此操作:

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')          
从flask导入flask、url、呈现模板、重定向
从表单导入LoginForm
从flask_login导入LoginManager、UserMixin、login_required、login_user
users_db={'user1':'pass1'}
app=烧瓶(名称)
login\u manager=LoginManager()
登录管理器。初始化应用程序(应用程序)
@登录\u manager.user\u加载程序
def加载用户(用户id):
如果用户数据库中的用户id为:
打印('在数据库中找到用户')
返回用户id
其他:
一无所获
类用户(UserMixin):
通过
app.config['SECRET_KEY']='abc123'
@app.route('/',methods=('GET','POST'))
def Login():
form=LoginForm()
if form.validate_on_submit():
打印('已验证')
用户名=form.username.data
登录用户(用户名)
next=flask.request.args.get('next')
如果不是安全url(下一步):
返回烧瓶。中止(400)
返回flask.redirect(下一个或flask.url_表示('hi'))
返回呈现模板('login.html',form=form)
@应用程序路径(“/hi”)
def hi():
return“”你好
{%如果当前用户是经过身份验证的%}
你好{{current_user.name}}!
{%endif%}”“”
@app.route(“/secure”)
@需要登录
def secure():
return“这是一个安全页面。”
@应用程序路径(“/注销”)
@需要登录
def注销():
注销用户()
返回重定向('https://cisco.com')          
这里有什么明显的错误,或者我在概念上不理解什么?
谢谢

您的用户数据库仅包含字符串。您必须创建User类的实例,并在登录时返回该实例

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

本文还介绍了登录机制

好的,我仍在试图弄清楚如何在没有所有SQL内容的情况下创建User类。我想加入UserMixin就足够了。是的!:-)但是您需要使用user类。ie
john=User()
,然后您需要将
john
放入词典中。但是很明显,你的用户类需要一个id和密码属性,或者你以后想要查询的任何东西。这必须是接近的!但仍然会出现相同的错误!-->你会成功的!:-)