在Android中使用Django User对象

时间:2015-01-25 12:29:15

标签: android django session-cookies django-users django-sessions

我有一个Android应用程序,与Django API交互,后者也是一个网站。

在Django网站上,用户使用Google + / Facebook / Twitter登录(使用django-social-auth),所有后续请求都包含用户对象,用于识别用户。我假设这是通过cookie完成的。

我想在Android应用程序中实现相同的功能。该应用程序使用Google + / Facebook / Twitter将用户登录,然后将访问令牌发送到API,该API会记录用户。

我需要传递回Android应用程序,然后在每次请求时返回API,以便让Django识别登录用户?

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。在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,你也可以这样做,只需确保注释 AFTER @extract_user,如下:

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