Я написал промежуточное программное обеспечение для управления сеансами. Я вижу, что промежуточное программное обеспечение работает в соответствии с ожиданиями, когда дело доходит до перенаправления на нужную страницу в соответствии с состоянием сеанса.
Но проблема в том, что маршруты, которые я написал только для пробуждения, когда сеанс активен, все еще получают попадание независимо от состояния сеанса, даже после перенаправления.
Eg. Безопасный домашний маршрут должен быть доступен только при установленном сеансе, промежуточное программное обеспечение выполняет свою работу, перенаправляя страницу на страницу входа в систему, но на сервере я вижу, что домашний маршрут по-прежнему был нажат
Я мог бы снова написать блок кода как
if sessionActive:
// Code Goes Here Which Should Run For Active Session State
else:
// Return with Forbidden Message
Я предполагаю, почему я должен писать вышеуказанный кусок кода, когда промежуточное программное обеспечение установлено?
PFB, код Middleware:
# Middleware Class to Handle Session & JWT default operations
# Written By: XXXX
# Date Written: Jan 1, 2019
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import redirect, render
from libraries.PostgreSQLConnector import PostgreSQLConnector
import jwt
class SessionHandler( object ):
'''
Main Function to process request header authenticity
Params: Object <request>
Return Type: Object
'''
def process_request( self, request ):
response = self.get_response( request )
path = request.path_info
PUBLIC_URLS = ('/authme/',)
if path in PUBLIC_URLS:
return response
else:
return self.regressChecking( request, path )
def regressChecking( self, request, path ):
response = self.get_response( request )
stoken = request.session.get('token', False)
if 'ctoken' in request.COOKIES and stoken:
if request.COOKIES['ctoken'] == stoken:
if not path.startswith("/admin") and request.method != 'POST':
return self.validatePagePermission( request, stoken, path )
return response
else:
response_redirect = HttpResponseRedirect('/authme/')
response_redirect.delete_cookie('csrftoken')
response_redirect.delete_cookie('ctoken')
return response_redirect
def validatePagePermission( self, request, token, path ):
if request.method == "GET":
token_dump = jwt.decode( token , "SECRET", algorithms="HS256")
userID = token_dump['user_id']
status = self.validateUserPerm( path, userID )
if status:
return self.get_response( request )
return HttpResponse("You are not allowed to access this page")
def validateUserPerm( self, SLUG, USERID ):
psy = PostgreSQLConnector( )
QUERY = '''select count(id) as is_present from system_user_form_level_permission where form_id_fk_id IN
(select id from system_app_form where form_name_html LIKE '%s') AND app_assignment_id_fk_id IN
(select id from system_apps_assignment where user_id_fk_id = %d )''' % ( SLUG, USERID )
r = psy._custom( QUERY , "select")
if len(r['data']) != 0:
return True
return False
def __init__( self, get_response ):
self.get_response = get_response
def __call__(self, request):
response = self.process_request(request)
return response
Пожалуйста, предложите, если есть недостаток в промежуточном программном обеспечении? Или нам все еще нужно явно вставить код проверки сеанса до того, как начнется безопасный код?