在 Android 中使用 Django 用户对象
Using Django User object in Android
我有一个 Android 应用程序,与 Django API 交互,它还托管一个网站。
在 Django 网站上,用户使用 Google+/Facebook/Twitter(使用 django-social-auth)登录,所有后续请求都包含一个用户对象,用于标识用户。我假设这是通过 cookie 完成的。
我想在我的 Android 应用程序中实现相同的功能。应用程序使用 Google+/Facebook/Twitter 登录用户,然后将访问令牌发送到 API,用户登录。
为了让 Django 识别登录用户,我需要将什么传回给 Android 应用程序,然后在每个请求中传回给 API?
我找到了解决办法。在 Django
中登录用户后,您 return 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):
...
我有一个 Android 应用程序,与 Django API 交互,它还托管一个网站。
在 Django 网站上,用户使用 Google+/Facebook/Twitter(使用 django-social-auth)登录,所有后续请求都包含一个用户对象,用于标识用户。我假设这是通过 cookie 完成的。
我想在我的 Android 应用程序中实现相同的功能。应用程序使用 Google+/Facebook/Twitter 登录用户,然后将访问令牌发送到 API,用户登录。
为了让 Django 识别登录用户,我需要将什么传回给 Android 应用程序,然后在每个请求中传回给 API?
我找到了解决办法。在 Django
中登录用户后,您 return 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):
...