Skip to main content

Authentication with Unity SDK

Last updated on October 27, 2023

Quick Reference

AGS Starter

This topic is specific to the AccelByte Gaming Services (AGS) Starter tier.

References
    using AccelByte.Api;
using AccelByte.Core;
using AccelByte.Models;
Login
    User user = AccelBytePlugin.GetUser();

user.LoginWithUsername(username, password,
result =>
{
if (result.IsError)
{
Debug.Log("Login failed");
// some actions
}
else
{
Debug.Log("Login successful");
// some actions
}
});
Check if a player is logged in
    AccelBytePlugin.GetUser().Session.IsValid();

Quickstart Guide

In this section, you will learn how to log in and connect to the IAM Services.

  1. Create a script called LoginHandler.cs and add the following AccelByte libraries to the top of the script:

    using AccelByte.Api;
    using AccelByte.Models;
    using AccelByte.Core;
  2. Set up the Login logic using the Username and Password method. In the script, add the following:

    // Function called to Login by email to AccelByte's IAM services.
    public void OnLoginClick(string username, string password)
    {
    // Grab a current User reference, even if it has not logged in yet.
    User user = AccelBytePlugin.GetUser();

    // Call the Login Function and supply a asynchronous callback to act based upon success or failure
    user.LoginWithUsername(username,password,
    result =>
    {
    if (result.IsError)
    {
    // Print the Error Code and Message if error happened
    Debug.Log($"Login failed : {result.Error.Code}: {result.Error.Message}");
    }
    else
    {
    Debug.Log("Login successful");
    }
    });
    }
  3. Test your script by calling it from elsewhere in MonoBehaviour and supplying sample credentials.

    void Start()
    {
    OnLoginClick("user@example.net","SuperPassword");
    }
  4. Attach your script to a new GameObject. In the example below, we have named this object AccelByteHandler. Test your object by pressing Play. If you have followed these steps correctly, you will see the message "Login successful" appear in your Console Log.

  5. Check whether the player is logged in by verifying that their session is valid.

    AccelBytePlugin.GetUser().Session.IsValid();

    For testing purposes, place this code in the Update function of your script:

    void Update()
    {
    if (AccelBytePlugin.GetUser().Session.IsValid())
    {
    Debug.Log("Logged in");
    }
    }

    When you press Play, you should see the player logged in with valid stored credentials. Once completed, remove this debug check from your script.

TROUBLESHOOTING

If you encounter a login failed message, check your login credentials or the API URLs supplied in the AccelByteSDKConfig.json file.

If the error is related to .JSON reading, check the format of your AccelByteSDKConfig.json file.

Congratulations! You have logged in.

Continue on for a step by step example of the UI and code implementation. Otherwise, you are now ready to move on to the Lobby service.

Step by step guide

UI Implementation
  1. Create an empty object (such as AccelByteHandler in Step 4 of the Quickstart Guide above) to hold all of the script components of the IAM services implementation.

  2. For the Login Page, create a new panel or scene with the following objects:

    • Username input field
    • Password input field
    • Login button
    • Status text
Code Implementation
  1. Add the following code to the top of your LoginHandler.cs class:

    using UnityEngine.UI;
  2. Inside the class, add references to the UI components you just created:

    [SerializeField]
    Button loginButton;
    [SerializeField]
    Text statusText;
    [SerializeField]
    InputField usernameInputField;
    [SerializeField]
    InputField passwordInputField;
    [SerializeField]
    RectTransform loginPanel;
  3. In the Start() function, remove the OnLoginClick() call and create two new functions, OnEnable() and OnDisable().

    private void OnEnable()
    {
    // When we activate, set the text of the Login Status
    // and add the Login Call to the button's listener
    statusText.text = "Please Login";
    loginButton.onClick.AddListener(()
    =>
    {
    statusText.text = "Attempting Login";
    OnLoginClick(usernameInputField.text, passwordInputField.text);
    });
    }

    private void OnDisable()
    {
    // When we disable, clear all of the listeners from the login button
    loginButton.onClick.RemoveAllListeners();
    }
  4. Within the OnLoginClick() function, add the following basic login components and status text. This text will be visible to the player when they are logging in:

    public void OnLoginClick(string username, string password)
    {
    // Disable interaction with the login button so the player cannot spam click it and send multiple requests
    loginButton.interactable = false;
    statusText.text = "Logging in...";
    ...

    user.LoginWithUsername(username, password,
    result =>
    {
    if (result.IsError)
    {
    // If there is an error, grab the Error Code and message to print in the log
    Debug.Log($"Login failed : {result.Error.Code}: {result.Error.Message}");
    // Set the Status Text to display any errors
    statusText.text = $"Login failed : {result.Error.Code}: {result.Error.Message}";
    }
    else
    {
    Debug.Log("Login successful");

    // Set the loginPanel to be inactive. In later tutorials, we'll also use this functionality to display the Lobby/Main menu
    loginPanel.gameObject.SetActive(false);
    }

    // Enable interaction with the button again
    loginButton.interactable = true;
    });
    ...
    • Set the loginButton to be disabled while awaiting the result of the login request (so that the player cannot spam login requests).
    • Set the statusText to display a message (such as "Logging in...") to display to the player while the login request is processing.
    • Set the statusText to show the relevant error code and message should the login attempt fail.
    • Set the loginPanel to be disabled if the player logs in successfully.
    • Enable intractability on the loginButton after the login result is determined.
  5. Save and return to the Editor. In the AccelByteHandler gameObject, drag the corresponding objects into the five exposed variables in your LoginHandler.cs script.

  6. Save your scene, press Play, and type in your credentials. If your credentials are incorrect, an error message will appear in the log and status text.

If your credentials are correct, the scene will become blank as the LoginPanel disappears.

Congratulations! You have fully implemented the Login, which is the gateway to all other AGS services.

Proceed to the next section to learn how to implement the Lobby Service.

Full code for reference

LoginHandler.cs
// Copyright (c) 2021 - 2023 AccelByte Inc. All Rights Reserved.
// This is licensed software from AccelByte Inc, for limitations
// and restrictions contact your company contract manager.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using AccelByte.Api;
using AccelByte.Models;
using AccelByte.Core;
using UnityEngine.Serialization;
using UnityEngine.UI;

public class LoginHandler : MonoBehaviour
{
[SerializeField]
Button loginButton;
[SerializeField]
Text statusText;
[SerializeField]
InputField usernameInputField;
[SerializeField]
InputField passwordInputField;
[SerializeField]
RectTransform loginPanel;

// Start is called before the first frame update
void Start()
{
}

private void OnEnable()
{
// When we activate, set the text of the Login Status
// and add the login call to the button's listener
statusText.text = "Please Login";
loginButton.onClick.AddListener(()
=>
{
statusText.text = "Attempting Login";
OnLoginClick(usernameInputField.text, passwordInputField.text);
});
}

private void OnDisable()
{
// When we disable, clear all of the listeners from the Login button
loginButton.onClick.RemoveAllListeners();
}

// Update is called once per frame
void Update()
{
// if (AccelBytePlugin.GetUser().Session.IsValid())
// {
// Debug.Log("Logged in");
// }
}

/// <summary>
/// Function called to Login to AGS IAM services
/// </summary>
/// <param name="username">The Username (typically an email address) of the user</param>
/// <param name="password">The password of the user</param>
public void OnLoginClick(string username, string password)
{
// Disable Interaction with the Login button so the player cannot spam click it and send multiple requests
loginButton.interactable = false;
statusText.text = "Logging in...";
// Grab a reference to the current user, even though they have not been logged in yet
// This also acts as the initialization point for the AGS plug-in
User user = AccelBytePlugin.GetUser();
// Calling the login function and supplying a callback to act upon based upon success or failure
// You will almost certainly want to extend this functionality further
// Note that this callback is asynchronous
user.LoginWithUsername(username, password,
result =>
{
if (result.IsError)
{
// If there is an error, grab the error code and message to print in the log
Debug.Log($"Login failed : {result.Error.Code}: {result.Error.Message}");
// Set the Status Text to display any errors
statusText.text = $"Login failed : {result.Error.Code}: {result.Error.Message}";
}
else
{
Debug.Log("Login successful");

loginPanel.gameObject.SetActive(false);
}

//Enable interaction with the button again
loginButton.interactable = true;
});
}
}