Пока нет ответов на этот вопрос, поэтому лучшее, что я могу сделать, это подтвердить, что он действительно работает физически.Для получения подробной информации о том, как настроить Flex Builder для написания html-оболочек, которые связываются с шаблонами страниц Django, см. мой другой пост .Выше было сделано с использованием комбинации вышеупомянутого, плюс:
Сделано SessionAlias
модель:
class SessionAlias(models.Model):
alias = models.CharField( max_length=40, primary_key=True )
session = models.ForeignKey( Session )
created = models.DateTimeField( auto_now_add=True )
Flex указывает на страницу Django, которая загружается через представление, содержащее:
s = SessionAlias()
s.alias = SessionStore().session_key // generates new 40-char random
s.session = Session.objects.get( session_key=request.session.session_key )
s.save();
randomcookie = SessionStore().session_key // generates new 40-char random
kwargs['extra_context']['randomcookie'] = randomcookie
response = direct_to_template( request, **kwargs )
response.set_cookie( randomcookie, value=alias )
В гибкой html-оболочке, где randomcookie - это место для поиска псевдонима:
<param name="flashVars" value="randomcookie={{randomcookie}}" />
В applicationComplete
, где мы получаем randomcookie и находим псевдоним, и регистрируемпри использовании этого:
var randomcookie:String = this.parameters["randomcookie"];
// randomcookie is something like "abc123"
var js:String = "function get_cookie(){return document.cookie;}";
var cookies:String = ExternalInterface.call(js).toString();
// cookies looks like "abc123=def456; sessionid=ghi789; ..."
var alias:String = // strip out the "def456"
mynetconnection.call( "loginByAlias", alias, successFunc, failureFunc );
Который в свою очередь обращается к этому шлюзу pyamf rpc:
from django.contrib.auth import SESSION_KEY, load_backend
from django.contrib.auth.models import User
from django.contrib import auth
from django.conf import settings
def loginByAlias( request, alias ):
a = SessionAlias.objects.get( alias=alias )
session_engine = __import__( settings.SESSION_ENGINE, {}, {}, [''] )
session_wrapper = session_engine.SessionStore( a.session.session_key )
user_id = session_wrapper.get( SESSION_KEY )
user = User.objects.get( id=user_id )
user.backend='django.contrib.auth.backends.ModelBackend'
auth.login( request, user )
a.delete()
return whateverToFlash
И в этот момент, на стороне flash / flex, этот конкретный mynetconnection
сохраняетСостояние cookie сеанса, которое может сделать будущие вызовы такими, что внутри шлюза request.user
является должным образом аутентифицированным пользователем, вошедшим на веб-страницу в первую очередь.
Еще раз обратите внимание, что настройки запуска / отладки для flexнеобходимо использовать https, а также настройки шлюза для NetConnection
.И, выпуская это, я должен удостовериться, что аутентифицированные пользователи остаются на https.
Любая дополнительная информация от людей будет оценена, особенно если есть реальные отзывы об аспектах безопасности этого ...