1

У меня есть приложение для Android, взаимодействующее с API Django, в котором также размещен веб-сайт.Использование объекта Django User в Android

На сайте Django пользователь регистрируется в Google +/Facebook/Twitter (используя django-social-auth), а все последующие запросы содержат пользовательский объект, который идентифицирует пользователя. Я предполагаю, что это делается через файлы cookie.

Я хочу реализовать ту же функциональность в своем приложении для Android. Приложение регистрирует пользователя с помощью Google +/Facebook/Twitter, а затем отправляет токен доступа в API, который регистрирует пользователя.

Что мне нужно для возврата обратно в приложение Android, а затем обратно API с каждым запросом, чтобы Django распознал зарегистрированного пользователя?

ответ

2

Я нашел решение для этого. После регистрации пользователя в Django вы возвращаете request.session.session_key. Вы сохраняете это в приложении и всякий раз, когда вам нужно сделать аутентифицированный запрос, вы передаете его обратно как параметр POST.

В Django, вы можете создать декоратор как таковой, чтобы автоматически преобразовать это в User объект в запросе:

def extract_user(function): 
    def handle_extraction(request, *args, **kwargs): 
     # Try to store the request.user if a session id is specified. 
     if request.POST.get('SESSION-ID'): 
      request.user = get_user_from_request_w_session_id(request) 

     # Execute the function. 
     return function(request, *args, **kwargs) 

    return handle_extraction 

Каждая функция, которая ожидает аутентифицированный пользователь теперь аннотированный так:

@extract_user 
def my_function(request): 
    ... 

Если вы хотите использовать @login_required, вы можете это сделать, просто обязательно сделайте аннотацию ПОСЛЕ@extract_user, как таковой:

@extract_user 
@login_required 
def my_function(request): 
    ... 
+0

как я должен опубликовать идентификатор сеанса? В заголовке или обычно? – SMahdiS

+0

@SMahdiS, вы передаете его как параметр POST. –