/// <summary>
        /// OAuth 'OnCreatingTicket' Handler
        /// Executed upon a successful external login.
        /// </summary>
        public static async Task HandleCreatingTicket(OAuthCreatingTicketContext context, GetClaimsCallback getClaimsCallback = null)
        {
            var oauthUser = await context.GetUser <TOAuthUser>();

            var logger             = context.Get <ILogger <TOAuthUser> >();
            var metadataConductor  = context.Get <IRepositoryConductor <TUserMetadata> >();
            var userConductor      = context.Get <IRepositoryConductor <TUser> >();
            var userLoginConductor = context.Get <IRepositoryConductor <TUserLogin> >();

            logger.LogInformation($"Authentication request for {oauthUser.UserMetadataName} {nameof(TUser)} '{oauthUser.Id}' - {oauthUser.Email}");

            var user      = FindOrCreateUser(oauthUser, userConductor, metadataConductor, logger);
            var userLogin = CreateLogin(userLoginConductor, user, context.Request, logger);

            if (getClaimsCallback != null)
            {
                context.Identity.AddClaims(getClaimsCallback(user, userLogin));
            }

            context.RunClaimActions();
        }