Sign In Register

How can we help you today?

Start a new topic

Gamesparks authentication

Hello when you log into gamesparks , in the authentication process does it use IP address to help identify the player ?? I have ran into a bug when testing multiple clients . So I launch the game twice . Client 1 I log in name =player1 If I save data to the database now . Everything works as expected. Now I log in as client 2. Name =player2. I switch back to client 1, player 1 but now when I try and save data . It saves my data as if i am client2,player2 So basically when I test with multiple clients the data saved is always the LAST authenticated player to log in so I'm wondering if this is caused by the fact I am testing all of this on the same computer/same IP address Or if there is some kind of bug or problem with the way I have things set up . Thanks

i have attached just the playercontroller.uasset file. which is where the test is setup. 


i have also uploaded the whole test project to dropbox in case you needed it all.

https://www.dropbox.com/s/hrq4d37bf9oc1ky/Mutagen.zip?dl=0


as i though it would the bug persists.

image


as you can see i authenticated twice with 2 different players , with 2 different IDs

but both the requests to ADD_CHARACTER came from the same ID which was the last player to authenticate.


setting the "clear cached" Boolean did nothing to change the behavior.


and result

image

as you can see both player1 and player 2 characters have been saved into one log entry under player 2's character array.



Another strange part of the behaviour is this . 

image


all of the prints strings that come out of the "OnResponce" execution from the GS NODES,  always print out as client2/ Player 2 for both characters. 

yet if i put the printstrings anywhere else they print out correctly so the hello would read as client1 : hello  where as my name is : would read as client 2:testing1


thanks for your time



Hi Anthony,


Understandable. If you upload the .uasset file where your logic is I will be able to debug for you.


Cheers,

Omar

Yeah I figured it had to

Be something wrong in unreal because I spent a day in the test harness debugging and trying different things but never had any problem with the code . That's why I made a brand blank new project to try and test things .


I'll post the setup I'm using for testing when I get home but it's very basic which is why I can't understand where this bug is coming from .


I have set up two test button inputs to simulate the user clicking login to start the authentification process .


I press 1 on the keyboard it calls the authentificarion node and for now I have hard coded the name and password to match what was used on the registration just in case it was incorrect values being set somewhere . 


So it logs in correctly then I set print strings to print out the username and user ID from the response . As expected it is player1 and player 1 user ID


The second button input does exactly the same . I press 2 on the keyboard and it logs me in using player 2 username and password again hardcoded . Again I check with print strings and the name and ID is correct .


So I start the game twice . So I have client 1 and client 2.


On client 1 I press the 1 key and am logged in as player1


On client 2 I press the 2 key and I am logged in as player 2 .


Now I call the add_character script from client 1 and pass it a character name "client one"


In the database I get one entry which is client 2 ID  and name but the playercharacter section has the character "client one" (wrong)


I now call the add_character from client 2 and pass in the character name "client two"


I now still have only one entry in the database but two characters "character one, and character two"

Both with client 2 ID and name .


I haven't tried changing the Boolean "clear cached" as I was unsure what it did and couldn't find it in the documentation . I will try it tonight and see if it makes any difference . 


Thanks  

 Hey Anthony,


I just copied your game's config and can confirm there's nothing wrong with your setup. It seems like your client setup has an inconsistency somewhere. To help us find out what it is, I need the following:


-Where does the login information come from? Do you players log in using password/username combo or some cached data somewhere?

-Do you do any caching of player data?

-Is there multiple authentication?

-Are there any hard set values that you forgot in Unreal?


Does checking the 'Clear cached authentication' bool in the GS connect node help?


Cheers,

Omar


Sure


My game or sdk is Unreal engine.


here is the setup


Player clicks on a widget button and i call the GS AuthenticationRequest

image


this is pretty much copied straight from your authentication example in the docs.  

https://docs.gamesparks.com/getting-started/using-authentication/unreal-authentication.html 


Rather than just printing the players name i save the players name into a variable called User name which i then pass into the event Show Main Menu. if the authentication fails i simply show an error message back to the player so they can try again .


Everything works as expected so far and i get a new player registered and authenticated/logged in.


Then i show the create character panel.

nothing fancy player can just choose a character and then type his name and then click create.

image


 Now when the player clicks the create character button i call the saveCharactersEvent


image


so first what happens is there is a switch on enumeration type that matches the character chosen by the player . For testing im only allowing the player to choose one character so it only has one branch output . (Speeda Gen)


next i am creating a basic structure to hold all the character data that will then be attached to an attribute and sent with the request.

this contains the characters name , current exp, and an id so that when i come to load the player mesh i know which character to spawn.


image



so from the struct data i am setting the GS data variables and then passing them into the Attribute (Characters)


finally i am then calling the GS LogEventRequest to pass the data from unreal into the attribute and call the cloud code event in order to save the data to the database.


image


and as you can see the result is as expected


image


i have one character saved in the database called test character.


now here is the bug part. ( i have tested this on a single computer, and on two completely separate computers on completely separate networks)


so now i package my game and open up the game twice. and log in on 2 different registered accounts as if i am testing a real live game scenario of two players logging into my game and making accounts.


image

image



The registration part works as expected . so i have created 2 new player accounts called AccountOne and AccountTwo

and it is registered fine in the database.


image



. now the problem is . when both players now create a character as before 


image



image


and i call the request to save the data to the database i get unexpected/wrong behaviour


this screenshot is Player/Client 1 -  AccountName/PlayerName =AccountOne


image


but as you can see it has saved the data as if i am logged in/authenticated  as Player/Client 2 -  AccountName/PlayerName =AccountTwo. which was the second player to log in. 


so basically the unexpected behaviour is that the data is always being saved under the last player to log in.


so for example if i logged in as 3 players eg playerOne, PlayerTwo , PlayerThree. All of the data for all 3 players would have the id of playerThree and all the data would be saved under playerThree object etc in the database.


where as this is the behaviour i would expect 


image


so here you can clearly see that there are two seperate player accounts , with seperate entries in the database and each has the correct unique id and character name.


thanks hope this makes sense .

Hi Anthony,


Could you give me some more information on how you are specifically logging in so I may help you troubleshoot this issue?


Thanks,

Ronan


Login to post a comment