如果我的网站应该可以从浏览器和一些API访问,我如何使用2个不同的登录管理器和flasklogin?

2024-05-15 17:52:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Flask开发一个网站,它由两部分组成,一个面向用户的GUI和一些api。在

目前面向用户的部分使用the standard process to authenticate a user,api应该使用suggested way to authenticate the users with APIs。在

这两种方法看起来都很容易使用,但我不确定如何在我的应用程序中同时使用它们来区分这两个用例。在

有什么想法吗?在

有什么不同的方法我可以考虑吗?在


Tags: theto方法apiflask网站guiprocess
1条回答
网友
1楼 · 发布于 2024-05-15 17:52:47

你可以使用两个不同的装载机。在

当有cookie时,Flask Login调用用user_loader修饰的函数。如果没有提供cookies,则使用request_loader修饰的函数称为[1]。在

简单示例:

from flask import Flask, session
from flask_login import LoginManager, current_user

lm = LoginManager()

users_by_id = {1: User(id=1, username='FirstUser')}
users_by_key = {'xxxyyyzzz': User(id=2, username='SecondUser')}

@lm.user_loader
def load_user(user_
    anon = User(id=0, username='Anonymous')
    return users_by_id.get(int(user_id), anon)


@lm.request_loader
def load_user(request):
    anon = User(id=0, username='Anonymous')
    header = request.headers.get('Auth', None)
    if not header:
        return anon

    return users_by_key.get(header, anon)


def create_app():
    app = Flask(__name__)
    lm.init_app(app)

    @app.route('/')
    def index():
        return 'Hello, {}'.format(current_user)

    @app.route('/login/')
    def login():
        session['user_id'] = 1
        return 'Logged in'

    return app


app = create_app()
app.config['SECRET_KEY'] = 'secret-key'
app.run()

现在,您可以使用浏览器转到http://127.0.0.1:5000/login/并“登录”,然后一个索引页将正确地将您定位为第一个用户。
然后,您可以通过标头发送请求并进行身份验证,如下所示:

^{pr2}$

相关问题 更多 >