Problems with Django Authentication

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Problems with Django Authentication

Kuros
Hello!

I recently discovered pyAMF and I'd really like to get it working with my Django backend for my application. I'm trying to get the authorization example i found here: http://sseetharaman.wordpress.com/2009/10/27/user-authentication-in-django-pyamf-and-flex3-2/ to work, but when I run th eprogram and click Login, nothing happens.

I have Django all set up and it works. I installed pyAMF. I placed a file called amfgateway in the application folder of my django project. Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009
  xmlns:s="library://ns.adobe.com/flex/spark
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import com.scheduler.models.UserVO;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://ipofmymachine:8080/amfgateway/";
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
}
private function loginUser():void
{
connection.call("UserService.userLogin",
new Responder(onResult, onFault),
txtUsername.text, txtPassword.text);
}
private function onResult(data:Object):void
{
if (data != null)
{
loginData = data as UserVO;
welcomeUser.text="Hi "+loginData.username;
logout.visible = true;
} else {
welcomeUser.text = "Wrong username or PW!";
logout.visible = false;
}
clearUser();
}
private function onLogout():void
{
if (loginData != null)
{
connection.call("UserService.userLogout",
new Responder(onResult_logout, onFault));
}
}
private function onResult_logout(data:Object):void
{
if (data == true)
{
welcomeUser.text = loginData.username + " logout successfully.";
logout.visible = false;
loginData = new UserVO();
clearUser();
}
}
private function onFault(data:Object):void
{
trace(data);
}
private function clearUser():void
{
txtUsername.text = "";
txtPassword.text = "";
}
]]>
</fx:Script>
<mx:ViewStack x="8.8" y="9.4" id="viewstack1" width="1266" height="643">
<s:NavigatorContent label="Login View" width="100%" height="100%">
<s:Label x="488" y="141" text="Login&#xd;" width="291" height="91" fontSize="36" verticalAlign="middle" textAlign="center"/>
<mx:Form x="502" y="237" width="263" height="199">
<mx:FormItem label="Username:">
<s:TextInput id="txtUsername"/>
</mx:FormItem>
<mx:FormItem label="Password:" textAlign="center">
<s:TextInput id="txtPassword"/>
</mx:FormItem>
<s:Button label="Login" id="btnLogin" click="loginUser()" />
<s:Button label="Logout" id="logout" />
<mx:Text id="welcomeUser" textAlign="center" color="red" />
</mx:Form>
</s:NavigatorContent>
<s:NavigatorContent label="Main View" width="100%" height="100%">
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>

That is my entire msxml file. 

Here is my UserVO class:

package com.scheduler.models
{
[RemoteClass(alias="com.example.models.UserVO")]
[Bindable]
public class UserVO
{
public var id:int;
public var username:String;
public var password:String;
public var email:String;
public var first_name:String;
public var last_name:String;
public var date_joined:String;
public var groups:String;
public var is_active:Boolean;
public var is_staff:Boolean;
public var is_superuser:Boolean;
public var last_login:String;
public var user_permissions:String;
public var backend:String;
public function UserVO()
{
}
}
}

and here is my amfgateway.py file:

import pyamf

from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway.django import DjangoGateway
from scheduler.schedulemanager.models import Location
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

pyamf.register_class(User, 'com.scheduler.models.UserVO')

def userLogin(request, username=None, password=None):
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return user
    return None

def userLogout(request):
    logout(request)
    return True

gw = DjangoGateway({
    "UserService.userLogin": userLogin,
    "UserService.userLogout": userLogout,
})

I'd really appreciate any help you guys could give me.

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problems with Django Authentication

Jesse Warden-2
Add a few things to connection to see if we can get some better logs, like connection.addEventListener(AsyncErrorEvent and... um... I think there's a Security one as well.  Also for your netStatus, do someting like:

connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);

function onNetStatus(event:NetStatusEvent):void
{
   trace("info: " + event.info.code);
}

To see what she says.

On Thu, Jan 20, 2011 at 12:30 AM, Fletcher Haynes <[hidden email]> wrote:
Hello!

I recently discovered pyAMF and I'd really like to get it working with my Django backend for my application. I'm trying to get the authorization example i found here: http://sseetharaman.wordpress.com/2009/10/27/user-authentication-in-django-pyamf-and-flex3-2/ to work, but when I run th eprogram and click Login, nothing happens.

I have Django all set up and it works. I installed pyAMF. I placed a file called amfgateway in the application folder of my django project. Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009
  xmlns:s="library://ns.adobe.com/flex/spark
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import com.scheduler.models.UserVO;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://ipofmymachine:8080/amfgateway/";
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
}
private function loginUser():void
{
connection.call("UserService.userLogin",
new Responder(onResult, onFault),
txtUsername.text, txtPassword.text);
}
private function onResult(data:Object):void
{
if (data != null)
{
loginData = data as UserVO;
welcomeUser.text="Hi "+loginData.username;
logout.visible = true;
} else {
welcomeUser.text = "Wrong username or PW!";
logout.visible = false;
}
clearUser();
}
private function onLogout():void
{
if (loginData != null)
{
connection.call("UserService.userLogout",
new Responder(onResult_logout, onFault));
}
}
private function onResult_logout(data:Object):void
{
if (data == true)
{
welcomeUser.text = loginData.username + " logout successfully.";
logout.visible = false;
loginData = new UserVO();
clearUser();
}
}
private function onFault(data:Object):void
{
trace(data);
}
private function clearUser():void
{
txtUsername.text = "";
txtPassword.text = "";
}
]]>
</fx:Script>
<mx:ViewStack x="8.8" y="9.4" id="viewstack1" width="1266" height="643">
<s:NavigatorContent label="Login View" width="100%" height="100%">
<s:Label x="488" y="141" text="Login&#xd;" width="291" height="91" fontSize="36" verticalAlign="middle" textAlign="center"/>
<mx:Form x="502" y="237" width="263" height="199">
<mx:FormItem label="Username:">
<s:TextInput id="txtUsername"/>
</mx:FormItem>
<mx:FormItem label="Password:" textAlign="center">
<s:TextInput id="txtPassword"/>
</mx:FormItem>
<s:Button label="Login" id="btnLogin" click="loginUser()" />
<s:Button label="Logout" id="logout" />
<mx:Text id="welcomeUser" textAlign="center" color="red" />
</mx:Form>
</s:NavigatorContent>
<s:NavigatorContent label="Main View" width="100%" height="100%">
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>

That is my entire msxml file. 

Here is my UserVO class:

package com.scheduler.models
{
[RemoteClass(alias="com.example.models.UserVO")]
[Bindable]
public class UserVO
{
public var id:int;
public var username:String;
public var password:String;
public var email:String;
public var first_name:String;
public var last_name:String;
public var date_joined:String;
public var groups:String;
public var is_active:Boolean;
public var is_staff:Boolean;
public var is_superuser:Boolean;
public var last_login:String;
public var user_permissions:String;
public var backend:String;
public function UserVO()
{
}
}
}

and here is my amfgateway.py file:

import pyamf

from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway.django import DjangoGateway
from scheduler.schedulemanager.models import Location
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

pyamf.register_class(User, 'com.scheduler.models.UserVO')

def userLogin(request, username=None, password=None):
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return user
    return None

def userLogout(request):
    logout(request)
    return True

gw = DjangoGateway({
    "UserService.userLogin": userLogin,
    "UserService.userLogout": userLogout,
})

I'd really appreciate any help you guys could give me.

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problems with Django Authentication

Nick Joyce
In reply to this post by Kuros
Does the logs produced by Django provide any help? For example can you see POST /amfgateway/ entries? If so, what are the HTTP status codes?

On Thu, Jan 20, 2011 at 3:30 PM, Fletcher Haynes <[hidden email]> wrote:
Hello!

I recently discovered pyAMF and I'd really like to get it working with my Django backend for my application. I'm trying to get the authorization example i found here: http://sseetharaman.wordpress.com/2009/10/27/user-authentication-in-django-pyamf-and-flex3-2/ to work, but when I run th eprogram and click Login, nothing happens.

I have Django all set up and it works. I installed pyAMF. I placed a file called amfgateway in the application folder of my django project. Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009
  xmlns:s="library://ns.adobe.com/flex/spark
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import com.scheduler.models.UserVO;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://ipofmymachine:8080/amfgateway/";
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
}
private function loginUser():void
{
connection.call("UserService.userLogin",
new Responder(onResult, onFault),
txtUsername.text, txtPassword.text);
}
private function onResult(data:Object):void
{
if (data != null)
{
loginData = data as UserVO;
welcomeUser.text="Hi "+loginData.username;
logout.visible = true;
} else {
welcomeUser.text = "Wrong username or PW!";
logout.visible = false;
}
clearUser();
}
private function onLogout():void
{
if (loginData != null)
{
connection.call("UserService.userLogout",
new Responder(onResult_logout, onFault));
}
}
private function onResult_logout(data:Object):void
{
if (data == true)
{
welcomeUser.text = loginData.username + " logout successfully.";
logout.visible = false;
loginData = new UserVO();
clearUser();
}
}
private function onFault(data:Object):void
{
trace(data);
}
private function clearUser():void
{
txtUsername.text = "";
txtPassword.text = "";
}
]]>
</fx:Script>
<mx:ViewStack x="8.8" y="9.4" id="viewstack1" width="1266" height="643">
<s:NavigatorContent label="Login View" width="100%" height="100%">
<s:Label x="488" y="141" text="Login&#xd;" width="291" height="91" fontSize="36" verticalAlign="middle" textAlign="center"/>
<mx:Form x="502" y="237" width="263" height="199">
<mx:FormItem label="Username:">
<s:TextInput id="txtUsername"/>
</mx:FormItem>
<mx:FormItem label="Password:" textAlign="center">
<s:TextInput id="txtPassword"/>
</mx:FormItem>
<s:Button label="Login" id="btnLogin" click="loginUser()" />
<s:Button label="Logout" id="logout" />
<mx:Text id="welcomeUser" textAlign="center" color="red" />
</mx:Form>
</s:NavigatorContent>
<s:NavigatorContent label="Main View" width="100%" height="100%">
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>

That is my entire msxml file. 

Here is my UserVO class:

package com.scheduler.models
{
[RemoteClass(alias="com.example.models.UserVO")]
[Bindable]
public class UserVO
{
public var id:int;
public var username:String;
public var password:String;
public var email:String;
public var first_name:String;
public var last_name:String;
public var date_joined:String;
public var groups:String;
public var is_active:Boolean;
public var is_staff:Boolean;
public var is_superuser:Boolean;
public var last_login:String;
public var user_permissions:String;
public var backend:String;
public function UserVO()
{
}
}
}

and here is my amfgateway.py file:

import pyamf

from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway.django import DjangoGateway
from scheduler.schedulemanager.models import Location
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

pyamf.register_class(User, 'com.scheduler.models.UserVO')

def userLogin(request, username=None, password=None):
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return user
    return None

def userLogout(request):
    logout(request)
    return True

gw = DjangoGateway({
    "UserService.userLogin": userLogin,
    "UserService.userLogout": userLogout,
})

I'd really appreciate any help you guys could give me.

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problems with Django Authentication

Kuros
In reply to this post by Jesse Warden-2
Thank you for the replies! I don't see it hitting my Django install...do I need to map a URL somehow?

I tried to add those error checking functions...it ended up looking like this:

import com.scheduler.models.UserVO;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.utils.ArrayUtil;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://10.0.60.1:8080/amfgateway/";
function onNetStatus(event:NetStatusEvent):void
{
trace("info: " + event.info.code);
}
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
}
private function onAsyncError(event:AsyncErrorEvent):void
{
trace("info: "+event.toString());
}

But I am not getting any info. I am not very familiar with AS yet, so I am not sure I did that right...

On Wed, Jan 19, 2011 at 10:33 PM, Jesse Warden <[hidden email]> wrote:
Add a few things to connection to see if we can get some better logs, like connection.addEventListener(AsyncErrorEvent and... um... I think there's a Security one as well.  Also for your netStatus, do someting like:

connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);

function onNetStatus(event:NetStatusEvent):void
{
   trace("info: " + event.info.code);
}

To see what she says.

On Thu, Jan 20, 2011 at 12:30 AM, Fletcher Haynes <[hidden email]> wrote:
Hello!

I recently discovered pyAMF and I'd really like to get it working with my Django backend for my application. I'm trying to get the authorization example i found here: http://sseetharaman.wordpress.com/2009/10/27/user-authentication-in-django-pyamf-and-flex3-2/ to work, but when I run th eprogram and click Login, nothing happens.

I have Django all set up and it works. I installed pyAMF. I placed a file called amfgateway in the application folder of my django project. Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009
  xmlns:s="library://ns.adobe.com/flex/spark
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import com.scheduler.models.UserVO;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://ipofmymachine:8080/amfgateway/";
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
}
private function loginUser():void
{
connection.call("UserService.userLogin",
new Responder(onResult, onFault),
txtUsername.text, txtPassword.text);
}
private function onResult(data:Object):void
{
if (data != null)
{
loginData = data as UserVO;
welcomeUser.text="Hi "+loginData.username;
logout.visible = true;
} else {
welcomeUser.text = "Wrong username or PW!";
logout.visible = false;
}
clearUser();
}
private function onLogout():void
{
if (loginData != null)
{
connection.call("UserService.userLogout",
new Responder(onResult_logout, onFault));
}
}
private function onResult_logout(data:Object):void
{
if (data == true)
{
welcomeUser.text = loginData.username + " logout successfully.";
logout.visible = false;
loginData = new UserVO();
clearUser();
}
}
private function onFault(data:Object):void
{
trace(data);
}
private function clearUser():void
{
txtUsername.text = "";
txtPassword.text = "";
}
]]>
</fx:Script>
<mx:ViewStack x="8.8" y="9.4" id="viewstack1" width="1266" height="643">
<s:NavigatorContent label="Login View" width="100%" height="100%">
<s:Label x="488" y="141" text="Login&#xd;" width="291" height="91" fontSize="36" verticalAlign="middle" textAlign="center"/>
<mx:Form x="502" y="237" width="263" height="199">
<mx:FormItem label="Username:">
<s:TextInput id="txtUsername"/>
</mx:FormItem>
<mx:FormItem label="Password:" textAlign="center">
<s:TextInput id="txtPassword"/>
</mx:FormItem>
<s:Button label="Login" id="btnLogin" click="loginUser()" />
<s:Button label="Logout" id="logout" />
<mx:Text id="welcomeUser" textAlign="center" color="red" />
</mx:Form>
</s:NavigatorContent>
<s:NavigatorContent label="Main View" width="100%" height="100%">
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>

That is my entire msxml file. 

Here is my UserVO class:

package com.scheduler.models
{
[RemoteClass(alias="com.example.models.UserVO")]
[Bindable]
public class UserVO
{
public var id:int;
public var username:String;
public var password:String;
public var email:String;
public var first_name:String;
public var last_name:String;
public var date_joined:String;
public var groups:String;
public var is_active:Boolean;
public var is_staff:Boolean;
public var is_superuser:Boolean;
public var last_login:String;
public var user_permissions:String;
public var backend:String;
public function UserVO()
{
}
}
}

and here is my amfgateway.py file:

import pyamf

from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway.django import DjangoGateway
from scheduler.schedulemanager.models import Location
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

pyamf.register_class(User, 'com.scheduler.models.UserVO')

def userLogin(request, username=None, password=None):
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return user
    return None

def userLogout(request):
    logout(request)
    return True

gw = DjangoGateway({
    "UserService.userLogin": userLogin,
    "UserService.userLogout": userLogout,
})

I'd really appreciate any help you guys could give me.

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problems with Django Authentication

Jesse Warden-2
Ah... hrm. Are you sure you're running the debug player? Do a quick test:

try
{
  throw new Error("alksdjf");
}
catch(err:Error)
{
  trace("do I have stack: " + err.getStackTrace();
}

On Thu, Jan 20, 2011 at 11:10 AM, Fletcher Haynes <[hidden email]> wrote:
Thank you for the replies! I don't see it hitting my Django install...do I need to map a URL somehow?

I tried to add those error checking functions...it ended up looking like this:

import com.scheduler.models.UserVO;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.utils.ArrayUtil;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://10.0.60.1:8080/amfgateway/";
function onNetStatus(event:NetStatusEvent):void
{
trace("info: " + event.info.code);
}
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
}
private function onAsyncError(event:AsyncErrorEvent):void
{
trace("info: "+event.toString());
}

But I am not getting any info. I am not very familiar with AS yet, so I am not sure I did that right...

On Wed, Jan 19, 2011 at 10:33 PM, Jesse Warden <[hidden email]> wrote:
Add a few things to connection to see if we can get some better logs, like connection.addEventListener(AsyncErrorEvent and... um... I think there's a Security one as well.  Also for your netStatus, do someting like:

connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);

function onNetStatus(event:NetStatusEvent):void
{
   trace("info: " + event.info.code);
}

To see what she says.

On Thu, Jan 20, 2011 at 12:30 AM, Fletcher Haynes <[hidden email]> wrote:
Hello!

I recently discovered pyAMF and I'd really like to get it working with my Django backend for my application. I'm trying to get the authorization example i found here: http://sseetharaman.wordpress.com/2009/10/27/user-authentication-in-django-pyamf-and-flex3-2/ to work, but when I run th eprogram and click Login, nothing happens.

I have Django all set up and it works. I installed pyAMF. I placed a file called amfgateway in the application folder of my django project. Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009
  xmlns:s="library://ns.adobe.com/flex/spark
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import com.scheduler.models.UserVO;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://ipofmymachine:8080/amfgateway/";
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
}
private function loginUser():void
{
connection.call("UserService.userLogin",
new Responder(onResult, onFault),
txtUsername.text, txtPassword.text);
}
private function onResult(data:Object):void
{
if (data != null)
{
loginData = data as UserVO;
welcomeUser.text="Hi "+loginData.username;
logout.visible = true;
} else {
welcomeUser.text = "Wrong username or PW!";
logout.visible = false;
}
clearUser();
}
private function onLogout():void
{
if (loginData != null)
{
connection.call("UserService.userLogout",
new Responder(onResult_logout, onFault));
}
}
private function onResult_logout(data:Object):void
{
if (data == true)
{
welcomeUser.text = loginData.username + " logout successfully.";
logout.visible = false;
loginData = new UserVO();
clearUser();
}
}
private function onFault(data:Object):void
{
trace(data);
}
private function clearUser():void
{
txtUsername.text = "";
txtPassword.text = "";
}
]]>
</fx:Script>
<mx:ViewStack x="8.8" y="9.4" id="viewstack1" width="1266" height="643">
<s:NavigatorContent label="Login View" width="100%" height="100%">
<s:Label x="488" y="141" text="Login&#xd;" width="291" height="91" fontSize="36" verticalAlign="middle" textAlign="center"/>
<mx:Form x="502" y="237" width="263" height="199">
<mx:FormItem label="Username:">
<s:TextInput id="txtUsername"/>
</mx:FormItem>
<mx:FormItem label="Password:" textAlign="center">
<s:TextInput id="txtPassword"/>
</mx:FormItem>
<s:Button label="Login" id="btnLogin" click="loginUser()" />
<s:Button label="Logout" id="logout" />
<mx:Text id="welcomeUser" textAlign="center" color="red" />
</mx:Form>
</s:NavigatorContent>
<s:NavigatorContent label="Main View" width="100%" height="100%">
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>

That is my entire msxml file. 

Here is my UserVO class:

package com.scheduler.models
{
[RemoteClass(alias="com.example.models.UserVO")]
[Bindable]
public class UserVO
{
public var id:int;
public var username:String;
public var password:String;
public var email:String;
public var first_name:String;
public var last_name:String;
public var date_joined:String;
public var groups:String;
public var is_active:Boolean;
public var is_staff:Boolean;
public var is_superuser:Boolean;
public var last_login:String;
public var user_permissions:String;
public var backend:String;
public function UserVO()
{
}
}
}

and here is my amfgateway.py file:

import pyamf

from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway.django import DjangoGateway
from scheduler.schedulemanager.models import Location
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

pyamf.register_class(User, 'com.scheduler.models.UserVO')

def userLogin(request, username=None, password=None):
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return user
    return None

def userLogout(request):
    logout(request)
    return True

gw = DjangoGateway({
    "UserService.userLogin": userLogin,
    "UserService.userLogout": userLogout,
})

I'd really appreciate any help you guys could give me.

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problems with Django Authentication

Nick Joyce
In reply to this post by Kuros
Sounds like the url is not mapped in Django correctly. Your urls.py file should look something like:

from django.conf.urls.defaults import *


urlpatterns = patterns('',
    (r'^amfgateway/$', 'amfgateway.gw'),
)

On Fri, Jan 21, 2011 at 2:10 AM, Fletcher Haynes <[hidden email]> wrote:
Thank you for the replies! I don't see it hitting my Django install...do I need to map a URL somehow?

I tried to add those error checking functions...it ended up looking like this:

import com.scheduler.models.UserVO;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.utils.ArrayUtil;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://10.0.60.1:8080/amfgateway/";
function onNetStatus(event:NetStatusEvent):void
{
trace("info: " + event.info.code);
}
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
}
private function onAsyncError(event:AsyncErrorEvent):void
{
trace("info: "+event.toString());
}

But I am not getting any info. I am not very familiar with AS yet, so I am not sure I did that right...

On Wed, Jan 19, 2011 at 10:33 PM, Jesse Warden <[hidden email]> wrote:
Add a few things to connection to see if we can get some better logs, like connection.addEventListener(AsyncErrorEvent and... um... I think there's a Security one as well.  Also for your netStatus, do someting like:

connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);

function onNetStatus(event:NetStatusEvent):void
{
   trace("info: " + event.info.code);
}

To see what she says.

On Thu, Jan 20, 2011 at 12:30 AM, Fletcher Haynes <[hidden email]> wrote:
Hello!

I recently discovered pyAMF and I'd really like to get it working with my Django backend for my application. I'm trying to get the authorization example i found here: http://sseetharaman.wordpress.com/2009/10/27/user-authentication-in-django-pyamf-and-flex3-2/ to work, but when I run th eprogram and click Login, nothing happens.

I have Django all set up and it works. I installed pyAMF. I placed a file called amfgateway in the application folder of my django project. Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009
  xmlns:s="library://ns.adobe.com/flex/spark
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import com.scheduler.models.UserVO;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://ipofmymachine:8080/amfgateway/";
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
}
private function loginUser():void
{
connection.call("UserService.userLogin",
new Responder(onResult, onFault),
txtUsername.text, txtPassword.text);
}
private function onResult(data:Object):void
{
if (data != null)
{
loginData = data as UserVO;
welcomeUser.text="Hi "+loginData.username;
logout.visible = true;
} else {
welcomeUser.text = "Wrong username or PW!";
logout.visible = false;
}
clearUser();
}
private function onLogout():void
{
if (loginData != null)
{
connection.call("UserService.userLogout",
new Responder(onResult_logout, onFault));
}
}
private function onResult_logout(data:Object):void
{
if (data == true)
{
welcomeUser.text = loginData.username + " logout successfully.";
logout.visible = false;
loginData = new UserVO();
clearUser();
}
}
private function onFault(data:Object):void
{
trace(data);
}
private function clearUser():void
{
txtUsername.text = "";
txtPassword.text = "";
}
]]>
</fx:Script>
<mx:ViewStack x="8.8" y="9.4" id="viewstack1" width="1266" height="643">
<s:NavigatorContent label="Login View" width="100%" height="100%">
<s:Label x="488" y="141" text="Login&#xd;" width="291" height="91" fontSize="36" verticalAlign="middle" textAlign="center"/>
<mx:Form x="502" y="237" width="263" height="199">
<mx:FormItem label="Username:">
<s:TextInput id="txtUsername"/>
</mx:FormItem>
<mx:FormItem label="Password:" textAlign="center">
<s:TextInput id="txtPassword"/>
</mx:FormItem>
<s:Button label="Login" id="btnLogin" click="loginUser()" />
<s:Button label="Logout" id="logout" />
<mx:Text id="welcomeUser" textAlign="center" color="red" />
</mx:Form>
</s:NavigatorContent>
<s:NavigatorContent label="Main View" width="100%" height="100%">
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>

That is my entire msxml file. 

Here is my UserVO class:

package com.scheduler.models
{
[RemoteClass(alias="com.example.models.UserVO")]
[Bindable]
public class UserVO
{
public var id:int;
public var username:String;
public var password:String;
public var email:String;
public var first_name:String;
public var last_name:String;
public var date_joined:String;
public var groups:String;
public var is_active:Boolean;
public var is_staff:Boolean;
public var is_superuser:Boolean;
public var last_login:String;
public var user_permissions:String;
public var backend:String;
public function UserVO()
{
}
}
}

and here is my amfgateway.py file:

import pyamf

from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway.django import DjangoGateway
from scheduler.schedulemanager.models import Location
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

pyamf.register_class(User, 'com.scheduler.models.UserVO')

def userLogin(request, username=None, password=None):
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return user
    return None

def userLogout(request):
    logout(request)
    return True

gw = DjangoGateway({
    "UserService.userLogin": userLogin,
    "UserService.userLogout": userLogout,
})

I'd really appreciate any help you guys could give me.

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problems with Django Authentication

Kuros
OK, that was the problem! Now I can see it hitting my Django server, and it is reporting th efollowing:

POST /gateway/ HTTP/1.1 500 61757

I think my issue with the debugging is that I don't have the debugger version of Flash installed...I'm going to work on that.

Progress! It still isn't doing what it is supposed to do, but at least they are talking now.

Thanks!

On Thu, Jan 20, 2011 at 2:34 PM, Nick Joyce <[hidden email]> wrote:
Sounds like the url is not mapped in Django correctly. Your urls.py file should look something like:

from django.conf.urls.defaults import *


urlpatterns = patterns('',
    (r'^amfgateway/$', 'amfgateway.gw'),
)

On Fri, Jan 21, 2011 at 2:10 AM, Fletcher Haynes <[hidden email]> wrote:
Thank you for the replies! I don't see it hitting my Django install...do I need to map a URL somehow?

I tried to add those error checking functions...it ended up looking like this:

import com.scheduler.models.UserVO;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.utils.ArrayUtil;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://10.0.60.1:8080/amfgateway/";
function onNetStatus(event:NetStatusEvent):void
{
trace("info: " + event.info.code);
}
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
}
private function onAsyncError(event:AsyncErrorEvent):void
{
trace("info: "+event.toString());
}

But I am not getting any info. I am not very familiar with AS yet, so I am not sure I did that right...

On Wed, Jan 19, 2011 at 10:33 PM, Jesse Warden <[hidden email]> wrote:
Add a few things to connection to see if we can get some better logs, like connection.addEventListener(AsyncErrorEvent and... um... I think there's a Security one as well.  Also for your netStatus, do someting like:

connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);

function onNetStatus(event:NetStatusEvent):void
{
   trace("info: " + event.info.code);
}

To see what she says.

On Thu, Jan 20, 2011 at 12:30 AM, Fletcher Haynes <[hidden email]> wrote:
Hello!

I recently discovered pyAMF and I'd really like to get it working with my Django backend for my application. I'm trying to get the authorization example i found here: http://sseetharaman.wordpress.com/2009/10/27/user-authentication-in-django-pyamf-and-flex3-2/ to work, but when I run th eprogram and click Login, nothing happens.

I have Django all set up and it works. I installed pyAMF. I placed a file called amfgateway in the application folder of my django project. Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009
  xmlns:s="library://ns.adobe.com/flex/spark
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import com.scheduler.models.UserVO;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://ipofmymachine:8080/amfgateway/";
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
}
private function loginUser():void
{
connection.call("UserService.userLogin",
new Responder(onResult, onFault),
txtUsername.text, txtPassword.text);
}
private function onResult(data:Object):void
{
if (data != null)
{
loginData = data as UserVO;
welcomeUser.text="Hi "+loginData.username;
logout.visible = true;
} else {
welcomeUser.text = "Wrong username or PW!";
logout.visible = false;
}
clearUser();
}
private function onLogout():void
{
if (loginData != null)
{
connection.call("UserService.userLogout",
new Responder(onResult_logout, onFault));
}
}
private function onResult_logout(data:Object):void
{
if (data == true)
{
welcomeUser.text = loginData.username + " logout successfully.";
logout.visible = false;
loginData = new UserVO();
clearUser();
}
}
private function onFault(data:Object):void
{
trace(data);
}
private function clearUser():void
{
txtUsername.text = "";
txtPassword.text = "";
}
]]>
</fx:Script>
<mx:ViewStack x="8.8" y="9.4" id="viewstack1" width="1266" height="643">
<s:NavigatorContent label="Login View" width="100%" height="100%">
<s:Label x="488" y="141" text="Login&#xd;" width="291" height="91" fontSize="36" verticalAlign="middle" textAlign="center"/>
<mx:Form x="502" y="237" width="263" height="199">
<mx:FormItem label="Username:">
<s:TextInput id="txtUsername"/>
</mx:FormItem>
<mx:FormItem label="Password:" textAlign="center">
<s:TextInput id="txtPassword"/>
</mx:FormItem>
<s:Button label="Login" id="btnLogin" click="loginUser()" />
<s:Button label="Logout" id="logout" />
<mx:Text id="welcomeUser" textAlign="center" color="red" />
</mx:Form>
</s:NavigatorContent>
<s:NavigatorContent label="Main View" width="100%" height="100%">
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>

That is my entire msxml file. 

Here is my UserVO class:

package com.scheduler.models
{
[RemoteClass(alias="com.example.models.UserVO")]
[Bindable]
public class UserVO
{
public var id:int;
public var username:String;
public var password:String;
public var email:String;
public var first_name:String;
public var last_name:String;
public var date_joined:String;
public var groups:String;
public var is_active:Boolean;
public var is_staff:Boolean;
public var is_superuser:Boolean;
public var last_login:String;
public var user_permissions:String;
public var backend:String;
public function UserVO()
{
}
}
}

and here is my amfgateway.py file:

import pyamf

from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway.django import DjangoGateway
from scheduler.schedulemanager.models import Location
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

pyamf.register_class(User, 'com.scheduler.models.UserVO')

def userLogin(request, username=None, password=None):
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return user
    return None

def userLogout(request):
    logout(request)
    return True

gw = DjangoGateway({
    "UserService.userLogin": userLogin,
    "UserService.userLogout": userLogout,
})

I'd really appreciate any help you guys could give me.

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Problems with Django Authentication

Nick Joyce
An local HTTP proxy is very useful for debugging these kinds of problems. There are plenty of offerings but I have found Charles to be the most intuitive - http://charlesproxy.com/ and it will also decode the AMF packets as they go over the wire. Its not free but you do get 30 mins before the app will self destruct, so its workable.

Good luck, let us know if you have any more problems.

Cheers,

Nick

On Fri, Jan 21, 2011 at 9:15 AM, Fletcher Haynes <[hidden email]> wrote:
OK, that was the problem! Now I can see it hitting my Django server, and it is reporting th efollowing:

POST /gateway/ HTTP/1.1 500 61757

I think my issue with the debugging is that I don't have the debugger version of Flash installed...I'm going to work on that.

Progress! It still isn't doing what it is supposed to do, but at least they are talking now.

Thanks!


On Thu, Jan 20, 2011 at 2:34 PM, Nick Joyce <[hidden email]> wrote:
Sounds like the url is not mapped in Django correctly. Your urls.py file should look something like:

from django.conf.urls.defaults import *


urlpatterns = patterns('',
    (r'^amfgateway/$', 'amfgateway.gw'),
)

On Fri, Jan 21, 2011 at 2:10 AM, Fletcher Haynes <[hidden email]> wrote:
Thank you for the replies! I don't see it hitting my Django install...do I need to map a URL somehow?

I tried to add those error checking functions...it ended up looking like this:

import com.scheduler.models.UserVO;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.utils.ArrayUtil;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://10.0.60.1:8080/amfgateway/";
function onNetStatus(event:NetStatusEvent):void
{
trace("info: " + event.info.code);
}
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
}
private function onAsyncError(event:AsyncErrorEvent):void
{
trace("info: "+event.toString());
}

But I am not getting any info. I am not very familiar with AS yet, so I am not sure I did that right...

On Wed, Jan 19, 2011 at 10:33 PM, Jesse Warden <[hidden email]> wrote:
Add a few things to connection to see if we can get some better logs, like connection.addEventListener(AsyncErrorEvent and... um... I think there's a Security one as well.  Also for your netStatus, do someting like:

connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);

function onNetStatus(event:NetStatusEvent):void
{
   trace("info: " + event.info.code);
}

To see what she says.

On Thu, Jan 20, 2011 at 12:30 AM, Fletcher Haynes <[hidden email]> wrote:
Hello!

I recently discovered pyAMF and I'd really like to get it working with my Django backend for my application. I'm trying to get the authorization example i found here: http://sseetharaman.wordpress.com/2009/10/27/user-authentication-in-django-pyamf-and-flex3-2/ to work, but when I run th eprogram and click Login, nothing happens.

I have Django all set up and it works. I installed pyAMF. I placed a file called amfgateway in the application folder of my django project. Here is my code:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009
  xmlns:s="library://ns.adobe.com/flex/spark
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
  creationComplete="init()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ArrayUtil;
import mx.controls.Alert;
import com.scheduler.models.UserVO;
   
private var connection:NetConnection;
[Bindable] private var loginData:UserVO
private var gateway:String = "http://ipofmymachine:8080/amfgateway/";
private function init():void
{
connection = new NetConnection();
connection.connect(gateway);
}
private function loginUser():void
{
connection.call("UserService.userLogin",
new Responder(onResult, onFault),
txtUsername.text, txtPassword.text);
}
private function onResult(data:Object):void
{
if (data != null)
{
loginData = data as UserVO;
welcomeUser.text="Hi "+loginData.username;
logout.visible = true;
} else {
welcomeUser.text = "Wrong username or PW!";
logout.visible = false;
}
clearUser();
}
private function onLogout():void
{
if (loginData != null)
{
connection.call("UserService.userLogout",
new Responder(onResult_logout, onFault));
}
}
private function onResult_logout(data:Object):void
{
if (data == true)
{
welcomeUser.text = loginData.username + " logout successfully.";
logout.visible = false;
loginData = new UserVO();
clearUser();
}
}
private function onFault(data:Object):void
{
trace(data);
}
private function clearUser():void
{
txtUsername.text = "";
txtPassword.text = "";
}
]]>
</fx:Script>
<mx:ViewStack x="8.8" y="9.4" id="viewstack1" width="1266" height="643">
<s:NavigatorContent label="Login View" width="100%" height="100%">
<s:Label x="488" y="141" text="Login&#xd;" width="291" height="91" fontSize="36" verticalAlign="middle" textAlign="center"/>
<mx:Form x="502" y="237" width="263" height="199">
<mx:FormItem label="Username:">
<s:TextInput id="txtUsername"/>
</mx:FormItem>
<mx:FormItem label="Password:" textAlign="center">
<s:TextInput id="txtPassword"/>
</mx:FormItem>
<s:Button label="Login" id="btnLogin" click="loginUser()" />
<s:Button label="Logout" id="logout" />
<mx:Text id="welcomeUser" textAlign="center" color="red" />
</mx:Form>
</s:NavigatorContent>
<s:NavigatorContent label="Main View" width="100%" height="100%">
</s:NavigatorContent>
</mx:ViewStack>
</s:Application>

That is my entire msxml file. 

Here is my UserVO class:

package com.scheduler.models
{
[RemoteClass(alias="com.example.models.UserVO")]
[Bindable]
public class UserVO
{
public var id:int;
public var username:String;
public var password:String;
public var email:String;
public var first_name:String;
public var last_name:String;
public var date_joined:String;
public var groups:String;
public var is_active:Boolean;
public var is_staff:Boolean;
public var is_superuser:Boolean;
public var last_login:String;
public var user_permissions:String;
public var backend:String;
public function UserVO()
{
}
}
}

and here is my amfgateway.py file:

import pyamf

from pyamf.flex import ArrayCollection, ObjectProxy
from pyamf.remoting.gateway.django import DjangoGateway
from scheduler.schedulemanager.models import Location
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User

pyamf.register_class(User, 'com.scheduler.models.UserVO')

def userLogin(request, username=None, password=None):
    user = authenticate(username=username, password=password)
    if user is not None:
        login(request, user)
        return user
    return None

def userLogout(request):
    logout(request)
    return True

gw = DjangoGateway({
    "UserService.userLogin": userLogin,
    "UserService.userLogout": userLogout,
})

I'd really appreciate any help you guys could give me.

_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users



_______________________________________________
PyAMF users mailing list - [hidden email]
http://lists.pyamf.org/mailman/listinfo/users
Loading...