Flask-login tak naprawdę nie ma zaplecza użytkownika, obsługuje tylko maszynerię sesji, aby pomóc w logowaniu i wylogowywaniu użytkowników. Musisz powiedzieć (za pomocą metod dekorowania), co reprezentuje użytkownika, a także od Ciebie zależy, jak dowiedzieć się, czy użytkownik jest „aktywny”, czy nie (ponieważ bycie „aktywnym” może oznaczać różne rzeczy w różnych aplikacjach ).
Powinieneś przeczytać dokumentację i upewnij się, co robi a czego nie . Tutaj skoncentruję się tylko na okablowaniu go z backendem db.
Na początek zdefiniuj obiekt użytkownika; który reprezentuje właściwości dla Twoich użytkowników. Ten obiekt może następnie wysyłać zapytania do baz danych, LDAP lub czegokolwiek innego i jest to hak, który łączy mechanizm logowania z zapleczem Twojej bazy danych.
Użyję przykładu logowania skrypt do tego celu.
class User(UserMixin):
def __init__(self, name, id, active=True):
self.name = name
self.id = id
self.active = active
def is_active(self):
# Here you should write whatever the code is
# that checks the database if your user is active
return self.active
def is_anonymous(self):
return False
def is_authenticated(self):
return True
Po utworzeniu obiektu użytkownika należy napisać metodę, która ładuje użytkownika (w zasadzie tworzy instancję User
klasa z góry). Ta metoda jest wywoływana z identyfikatorem użytkownika.
@login_manager.user_loader
def load_user(id):
# 1. Fetch against the database a user by `id`
# 2. Create a new object of `User` class and return it.
u = DBUsers.query.get(id)
return User(u.name,u.id,u.active)
Gdy wykonasz te czynności, twoja metoda logowania zrobi to:
-
Sprawdza, czy nazwa użytkownika i hasło są zgodne (w Twojej bazie danych) - musisz sam napisać ten kod.
-
Jeśli uwierzytelnianie się powiodło, powinieneś przekazać instancję użytkownika do
login_user()