I want to call RegisterPlayFabUser and AddUsernamePassword from my CloudScript to create/update the player's username, password and e-mail address. I have tried it with a POST method but it's not working. I get an exception.
Is it possible to create/update the player's username, password and e-mail address in CloudScript?
Raw event JSON { "EventName": "player_executed_cloudscript", "Source": "CloudScript", "FunctionName": "VerifyUsernamePassword", "CloudScriptExecutionResult": { "FunctionName": "VerifyUsernamePassword", "Revision": 66, "FunctionResult": null, "FunctionResultTooLarge": null, "Logs": [], "LogsTooLarge": null, "ExecutionTimeSeconds": 0.022820399999999998, "ProcessorTimeSeconds": 0, "MemoryConsumedBytes": 43752, "APIRequestsIssued": 1, "HttpRequestsIssued": 0, "Error": { "Error": "JavascriptException", "Message": "JavascriptException", "StackTrace": "ReferenceError: PlayFabID is not defined\n at handlers.VerifyUsernamePassword (BFD0A-main.js:80:96)" } }, "EventNamespace": "com.playfab", "EntityType": "player", "TitleId": "BFD0A", "EntityId": "1066CF1F71C39EC1", "EventId": "dcdbaeaacd364dc09847745399550ccf", "SourceType": "BackEnd", "Timestamp": "2019-10-10T13:24:10.6302392Z", "History": null, "CustomTags": null, "Reserved": null, "PlayFabEnvironment": { "Vertical": "master", "Cloud": "main", "Application": "logicserver", "Commit": "a881f0a" } }
CloudScript POST method for AddUsernamePassword:
handlers.VerifyUsernamePassword = function (args, context) { var resultprofile = server.GetPlayerProfile( { PlayFabID: currentPlayerId }); var result = AddUsernamePasswordFromCloudScript(args.Email, args.Username, args.Password, PlayFabID); return result; } function AddUsernamePasswordFromCloudScript(email, username, password, playFabId) { var contentBodyTemp = { "PlayFabId": playFabId, "Email": email, "Username": username, "Password": password }; let url = "https://BFD0A.playfabapi.com/Admin/AddUsernamePassword"; let method = "POST"; let contentBody = `{"PlayFabId": "${playFabId}", "Email": "${email}", "Username": "${username}", "Password": "${password}"}`; let contentType = "application/json"; let headers = { "X-SecretKey": "..." }; let responseString = http.request(url, method, contentBody, contentType, headers); let responseJSONObj = JSON.parse(responseString); return (responseJSONObj); }
Client Code:
private async Task UpdateUsernamePasswordCloud() { var result = await PlayFabClientAPI.ExecuteCloudScriptAsync(new ExecuteCloudScriptRequest() { FunctionName = "VerifyUsernamePassword", FunctionParameter = new { Email = "player1test@gmail.com", Username = "Player1username", Password = "Player1password!!!" }, GeneratePlayStreamEvent = true }); if (result.Error != null) Console.WriteLine(result.Error.Error.ToString()); else { if (result.Result.Logs.Count() > 0) Console.WriteLine(result.Result.Logs[0].Message); } }
UPDATE:
Here is my new client and CloudScript code. The CloudScript code for AddUsernamePassword works.
But I get an exception in my client code if I want to call RegisterPlayFabUser in CloudScript.
Why is the player not logged in if I call RegisterPlayFabUser in CloudScript?
PlayFab.PlayFabException has been thrown Must be logged in to call this method
Client code:
private async Task UpdateUsernamePasswordCloud() { var result = await PlayFabClientAPI.ExecuteCloudScriptAsync(new ExecuteCloudScriptRequest() { FunctionName = "AddUsernamePassword", FunctionParameter = new { SessionTicket = playersessionTicket, Email = "player11test@gmail.com", Username = "Player11username", Password = "Player11password!!!" }, GeneratePlayStreamEvent = true }); if (result.Error != null) Console.WriteLine(result.Error.Error.ToString()); else { if (result.Result.Logs.Count() > 0) Console.WriteLine(result.Result.Logs[0].Message); } } private async Task RegisterPlayFabUserCloud() { var result = await PlayFabClientAPI.ExecuteCloudScriptAsync(new ExecuteCloudScriptRequest() { FunctionName = "RegisterPlayFabUser", FunctionParameter = new { SessionTicket = playersessionTicket, Email = "player1test@gmail.com", Username = "Player1username", Password = "Player1password!!!" }, GeneratePlayStreamEvent = true }); if (result.Error != null) Console.WriteLine(result.Error.Error.ToString()); else { if (result.Result.Logs.Count() > 0) Console.WriteLine(result.Result.Logs[0].Message); } }
CloudScript:
handlers.AddUsernamePassword = function (args, context) { var resultprofile = server.GetPlayerProfile( { PlayFabID: currentPlayerId }); var result = AddUsernamePasswordFromCloudScript(args.SessionTicket, args.Email, args.Username, args.Password, currentPlayerId); return result; } function AddUsernamePasswordFromCloudScript(sessionticket, email, username, password, playFabId) { var contentBodyTemp = { "PlayFabId": playFabId, "Email": email, "Username": username, "Password": password }; let url = "https://BFD0A.playfabapi.com/Client/AddUsernamePassword"; let method = "POST"; let contentBody = `{"PlayFabId": "${playFabId}", "Email": "${email}", "Username": "${username}", "Password": "${password}"}`; let contentType = "application/json"; let headers = { "X-Authentication": sessionticket }; let responseString = http.request(url, method, contentBody, contentType, headers); let responseJSONObj = JSON.parse(responseString); return (responseJSONObj); } handlers.RegisterPlayFabUser = function (args, context) { var resultprofile = server.GetPlayerProfile( { PlayFabID: currentPlayerId }); var result = RegisterPlayFabUserFromCloudScript(args.SessionTicket, args.Email, args.Username, args.Password, currentPlayerId); return result; } function RegisterPlayFabUserFromCloudScript(sessionticket, email, username, password, playFabId) { var contentBodyTemp = { "TitleId": BFD0A, "RequireBothUsernameAndEmail": true, "PlayFabId": playFabId, "Email": email, "Username": username, "Password": password }; let url = "https://BFD0A.playfabapi.com/Client/RegisterPlayFabUser"; let method = "POST"; let contentBody = `{"TitleId": "${BFD0A}", "RequireBothUsernameAndEmail": "${true}", "PlayFabId": "${playFabId}", "Email": "${email}", "Username": "${username}", "Password": "${password}"}`; let contentType = "application/json"; let headers = { "X-Authentication": sessionticket }; let responseString = http.request(url, method, contentBody, contentType, headers); let responseJSONObj = JSON.parse(responseString); return (responseJSONObj); }