Q: Как сохранить данные сеанса до аутентификации - PullRequest
1 голос
/ 30 марта 2019

Я использую аутентификацию django-all при входе в систему GMail.

Есть одно из моих представлений, которое получит HTTP-POST со страницы входа в Hotspot на другом сервере (на самом деле это перенаправление mikrotik hotspot).Мне нужно читать их опубликованные данные ПОСЛЕ входа в социальную сеть.

Я читаю https://stackoverflow.com/a/32250781/5901318

Похоже, самый безопасный способ - сохранить данные POST в сеансе, и позже мой взгляд получит их отrequest.session

но я не знаю, как «безопасно хранить данные в request.session до того, как произойдет аутентификация».

def my_login_required(function):
    #https://stackoverflow.com/a/39256685/5901318
    def wrapper(request, *args, **kwargs):
        decorated_view_func = login_required(request)
        if not decorated_view_func.user.is_authenticated:
            if request.method == "POST" :
                print('my_login_required POST:',request.POST.__dict__)
                print('my_login_required ARGS:',args)
                print('my_login_required KWARGS:',kwargs)
                print('my_login_required SESSION:',request.session.__dict__)
    wrapper.__doc__ = function.__doc__
    wrapper.__name__ = function.__name__
    return wrapper


#@receiver(user_logged_in)
@csrf_exempt 
@my_login_required
def hotspotlogin(request,*args,**kwargs):
    print('HOTSPOTLOGIN')

Я пытался получить к нему доступ с помощью запросов:

r = requests.post('http://mysite:8000/radius/hotspotlogin/', json={"NAMA": "BINO"}, headers = {'Content-type': 'application/json', 'Accept': 'text/plain'})

но в оболочке django я получил только:

my_login_required POST: {'_encoding': 'utf-8', '_mutable': False}
my_login_required ARGS: ()
my_login_required KWARGS: {}
my_login_required SESSION: {'storage_path': '/opt/djangos/radius03/mysessions/', 'file_prefix': 'sessionid', '_SessionBase__session_key': None, 'accessed': True, 'modified': False, 'serializer': <class 'django.core.signing.JSONSerializer'>, '_session_cache': {}}

Пожалуйста, дайте мне любую подсказку, чтобы сделать это.

С уважением

-бино-

1 Ответ

0 голосов
/ 31 марта 2019

Получил бесценную помощь от друга, и вот решение.

def my_login_required(function):
    def wrapper(request, *args, **kwargs):
        old_data=dict()
        try :
            old_data['POST'] = dict(request.POST)
        except :
            old_data['POST'] = dict()

        try :
            old_data['GET'] = dict(request.GET)
        except :
            old_data['GET'] = dict()

        old_data['method'] = request.method

        decorated_view_func = login_required(request)
        if not decorated_view_func.user.is_authenticated: #Only if user not authenticated
            request.session['old'] = old_data  #put old data in request.session['old']
            return decorated_view_func(request)  # return redirect to signin

        return function(request, *args, **kwargs)

    wrapper.__doc__ = function.__doc__
    wrapper.__name__ = function.__name__
    return wrapper


@my_login_required
def testview(request,*args,**kwargs):
    print('SESSION DATA:', request.session.get('old')) #take original post/get data from request.session['old']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...