두 개의 다른 로더를 사용할 수 있습니다.
Flask-Login은 쿠키가있을 때 user_loader
으로 장식 된 함수를 호출합니다. 제공된 쿠키가없는 경우 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/로 가서 "로그인"을 선택한 후 인덱스 페이지는 FirstUser로 당신을 해결 올바르게 것입니다 수 있습니다.
그런 다음 다음과 같이 헤더를 통해 요청을 전송하고 인증 할 수 있습니다 :
>>> import requests
>>> r = requests.get('http://127.0.0.1:5000/', headers={'Auth': 'xxxyyyzzz'})
>>> r.text
"Hello, User('SecondUser')"
내가 모두 로더를 추가하려고하지만 request_loader 전혀 호출되지 않습니다. 가능한 이유는 무엇입니까? – heapOverflow
내가 생각할 수있는 유일한 점은 쿠키가 보내 졌기 때문에'request_loader'가 건너 뛴다는 것입니다. API 요청은 어떻게 작성합니까? 답변을 작은 예제로 업데이트합니다. – leovp
그것은 참으로 그 것이었다. 고맙습니다. – heapOverflow