♻️ utilize request.META more
This commit is contained in:
parent
9d4dffb358
commit
e23b5c3172
@ -12,14 +12,17 @@ from spiderweb.utils import generate_key, is_jsonable
|
|||||||
|
|
||||||
class Session(SpiderwebModel):
|
class Session(SpiderwebModel):
|
||||||
session_key = CharField(max_length=64)
|
session_key = CharField(max_length=64)
|
||||||
|
csrf_token = CharField(max_length=64, null=True)
|
||||||
user_id = CharField(max_length=64, null=True)
|
user_id = CharField(max_length=64, null=True)
|
||||||
is_authenticated = BooleanField(default=False)
|
|
||||||
session_data = TextField()
|
session_data = TextField()
|
||||||
created_at = DateTimeField()
|
created_at = DateTimeField()
|
||||||
last_active = DateTimeField()
|
last_active = DateTimeField()
|
||||||
ip_address = CharField(max_length=30)
|
ip_address = CharField(max_length=30)
|
||||||
user_agent = TextField()
|
user_agent = TextField()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
table_name = 'spiderweb_sessions'
|
||||||
|
|
||||||
|
|
||||||
class SessionMiddleware(SpiderwebMiddleware):
|
class SessionMiddleware(SpiderwebMiddleware):
|
||||||
def process_request(self, request: Request):
|
def process_request(self, request: Request):
|
||||||
@ -46,9 +49,11 @@ class SessionMiddleware(SpiderwebMiddleware):
|
|||||||
request.SESSION = {}
|
request.SESSION = {}
|
||||||
request._session["id"] = generate_key()
|
request._session["id"] = generate_key()
|
||||||
request._session["new_session"] = True
|
request._session["new_session"] = True
|
||||||
|
request.META["SESSION"] = None
|
||||||
return
|
return
|
||||||
|
|
||||||
request.SESSION = json.loads(existing_session.session_data)
|
request.SESSION = json.loads(existing_session.session_data)
|
||||||
|
request.META["SESSION"] = existing_session
|
||||||
request._session["id"] = existing_session.session_key
|
request._session["id"] = existing_session.session_key
|
||||||
existing_session.save()
|
existing_session.save()
|
||||||
|
|
||||||
@ -83,7 +88,7 @@ class SessionMiddleware(SpiderwebMiddleware):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Otherwise, we can save the one we already have.
|
# Otherwise, we can save the one we already have.
|
||||||
session_key = request._session["id"]
|
session_key = request.META["SESSION"].session_key
|
||||||
# update the session expiration time
|
# update the session expiration time
|
||||||
response.set_cookie(
|
response.set_cookie(
|
||||||
self.server.session_cookie_name,
|
self.server.session_cookie_name,
|
||||||
@ -91,15 +96,7 @@ class SessionMiddleware(SpiderwebMiddleware):
|
|||||||
**cookie_settings,
|
**cookie_settings,
|
||||||
)
|
)
|
||||||
|
|
||||||
session = (
|
session = request.META["SESSION"]
|
||||||
Session.select()
|
|
||||||
.where(
|
|
||||||
Session.session_key == session_key,
|
|
||||||
Session.ip_address == request.META.get("client_address"),
|
|
||||||
Session.user_agent == request.headers.get("HTTP_USER_AGENT"),
|
|
||||||
)
|
|
||||||
.first()
|
|
||||||
)
|
|
||||||
if not session:
|
if not session:
|
||||||
if not is_jsonable(request.SESSION):
|
if not is_jsonable(request.SESSION):
|
||||||
raise ValueError("Session data is not JSON serializable.")
|
raise ValueError("Session data is not JSON serializable.")
|
||||||
|
Loading…
Reference in New Issue
Block a user