Mam aplikację Django, która pobiera dane całkowicie z zewnętrznego źródła (zapytanie przez HTTP). Oznacza to, że nie mam opcji lokalnej bazy danych. Dane sesji są przechowywane w pamięci podręcznej (na moim serwerze programistycznym używam bazy danych SQLite, więc nie jest to źródło błędów). Używam krwawiącego Django 1.1svn.Użytkownicy i autoryzacja Django z zewnętrznego źródła
Wprowadź problem: chcę używać systemu uwierzytelniania Django dla użytkowników.
Wydaje się dość prosty napisać własne zaplecze uwierzytelniające, ale zawsze pod warunkiem, że masz lokalną bazę danych, w której można zapisać użytkowników. Bez bazy danych moim głównym problemem jest wytrwałość.
Próbowałem ją następująco (zakładamy, że datasource.get()
to funkcja zwraca jakąś dict):
class ModelBackend (object):
"""Login backend."""
def authenticate (self, username=None, password=None):
"""Check, if a given user/password combination is valid"""
data = datasource.get ('login', username, password)
if data and data['ok']:
return MyUser (username=username)
else:
raise TypeError
return None
def get_user (self, username):
"""get data about a specific user"""
try:
data = datasource.get ('userdata', username)
if data and data['ok']:
return data.user
except:
pass
return None
class MyUser (User):
"""Django user who isn't saved in DB"""
def save (self):
return None
Ale celowo brakuje save()
metoda na myuser wydaje się przełamać pamięci sesji o logowaniu.
Jak powinien wyglądać MyUser
bez lokalnej bazy danych?
Właśnie znalazłem Wydaje się robić to, co chcę. Jeśli ją ocenię, opublikuję odpowiedź (nie zniechęcaj się do dodawania własnych ;-)). –
Boldewyn
Łącze ma nieprzemyślane końcowe ">" ... cekiny. – Boldewyn