When receiving the user result for the login() method, it’s typed as an ObjectProxy. Trying to cast it to a BackendlessUser type makes it null.
Hi Devin,
Here’s the code I just tried and it works for me just fine:
responder = new Responder( function( userEvent:ResultEvent ):void
{
trace( "got user" );
var backendlessUser:BackendlessUser = userEvent.result as BackendlessUser;
trace( backendlessUser.getProperty( "email" ) );
},
function( evt:FaultEvent ):void
{
trace( "got error" );
}
);
Backendless.UserService.login( myLoginName, myPassword, responder );
How different is your code?
Mark
I’m utilizing the returned asynctoken with the parsley framework. I’ll play with it a bit more tomorrow and let you know what I find. Thanks Mark.
[reply user_id=1][h4]Hi Mark,[/h4]
When specify a responder as an argument in the service call (as you did with your code), it works fine; I do get a BackendlessUser returned. It’s only when adding a responder to the resulting AsyncToken that an ObjectProxy is returned instead of a BackendlessUser
var token:AsyncToken = Backendless.UserService.login(email, password);token.addResponder(new Responder(loginResult, loginFault));[/reply]
Hi Devin,
You’re correct, if you add a responder to async token, it will not cast automatically. Here’s the reason: take a look at the lines 110-112 here:
As you can see, we build a user object from the event we get from the server using the following call:
_currentUser = ObjectsBuilder.buildUser(event.result);
Setting the user token on line 112 is also quite important. The token is used to maintain the user session. I recommend duplicating these lines in your responder which you add directly to async token.
Regards,
Mark
Thanks Mark, that works. I also found found this solution, from the user-service-parsley example, to be a pretty clean way of handling it:
public function result(user:Object):void
{
Logger.info("Login success");
model.setUser(Backendless.UserService.currentUser);
dispatcher(new NavigateToMessage(Destination.LOGGEDIN));
}