python-3.x - 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')
这里有什么明显的错误,或者我在概念上不理解什么?谢谢!!!
解决方案
您的 user_db 仅包含字符串。您必须创建 User 类的实例并在登录时返回该实例。
见https://flask-login.readthedocs.io/en/latest/
PS我在手机上,如果这还不够信息,我稍后会更新我的答案。
本文还介绍了登录机制 https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins
推荐阅读
- python - Chrome Web 驱动程序返回无效的 Chrome 版本
- asp.net - 修改 ID 时,产品名称在 URL 中没有更改 ASP.Net Webform
- php - 如何在 laravel 8 中获取登录的用户 ID
- c# - type.GenericTypeArguments 的意外结果
- azure - Azure IOT HUB 诊断日志仅在信息级别显示设备连接日志,而不是任何错误级别日志
- oracle - Hibernate 原生查询
- c++ - 如何将编译选项添加到 CMake FetchContent 依赖项?
- jasper-reports - 如果数据超过一页,isPrintInFirstWholeBand="true" 属性将不起作用
- postgresql - Linux Mint 20.2:E:包 'pgadmin4' 没有安装候选
- css - 在 React.JS 中映射元素时的过渡效果