# User events

Sitefinity CMS users are users who can conduct content management and/or administrative tasks within a given website project. When the website administrator creates, deletes, or modifies a user, a variety of user events are fired. You can subscribe to any of the user events described below.

For more information about managing and administering users, see [Users](https://www.progress.com/documentation/sitefinity-cms/overview-users).

## UserEventBase

This is the base class for events that notifies for changes in the Sitefinity CMS users. Use the following code to subscribe:

```C#
using System;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Security.Events;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
        }

        private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            EventHub.Subscribe<UserEventBase>(evt => UserEventHandler(evt));
        }

        public void UserEventHandler(UserEventBase eventInfo)
        {
            var userId = eventInfo.UserId;
            var userName = eventInfo.UserName;
            var membershipProviderName = eventInfo.MembershipProviderName;
            var isApproved = eventInfo.IsApproved;
            var email = eventInfo.Email;
            var password = eventInfo.Password;
            var passwordFormat = eventInfo.PasswordFormat;
        }
    }
}
```

In the event handler, you can access the following information:

* ID of the user
* Username
* Name of the membership provider
* Approval status of the user
* Email of the user
* Password of the user
* Password format

## UserCreating

This event fires when a Sitefinity CMS user is being created and is pending approval. Use the following code to subscribe:

```C#
using System;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Security.Events;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
        }

        private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            EventHub.Subscribe<UserCreating>(evt => UserCreatingEventHandler(evt));
        }

        public void UserCreatingEventHandler(UserCreating eventInfo)
        {
            var user = eventInfo.User;
        }
    }
}
```

In the event handler, you can access the user which is pending for creation.

## UserCreated

This event fires when a Sitefinity CMS user is already created. Use the following code to subscribe:

```C#
using System;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Security.Events;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
        }

        private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            EventHub.Subscribe<UserCreated>(evt => UserCreatedEventHandler(evt));
        }

        public void UserCreatedEventHandler(UserCreated eventInfo)
        {
            // your logic
        }

    }
}
```

## UserUpdating

This event fires when a Sitefinity CMS user is being modified. Use the following code to subscribe:

```C#
using System;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Security.Events;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
        }

        private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            EventHub.Subscribe<UserUpdating>(evt => UserUpdatingEventHandler(evt));
        }

        public void UserUpdatingEventHandler(UserUpdating eventInfo)
        {
            var approvalStatusChanged = eventInfo.ApprovalStatusChanged;
            var passwordChanged = eventInfo.PasswordChanged;
            var user = eventInfo.User;
        }
    }
}
```

In the event handler, you can access the following information:

* A flag which indicates whether the approval status of a user is changed.
* A flag which indicates whether the password of a user is being changed.
* The user which is pending for an update.

## UserUpdated

This event fires when a Sitefinity CMS user is already modified. Use the following code to subscribe:

```C#
using System;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Security.Events;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
        }

        private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            EventHub.Subscribe<UserUpdated>(evt => UserUpdatedEventHandler(evt));
        }

        public void UserUpdatedEventHandler(UserUpdated eventInfo)
        {
            var approvalStatusChanged = eventInfo.ApprovalStatusChanged;
            var passwordChanged = eventInfo.PasswordChanged;
        }
    }
}
```

In the event handler, you can access the following information:

* A flag which indicates whether the approval status of a user is changed.
* A flag which indicates whether the password of a user is changed.

## UserDeleting

This event fires when a Sitefinity CMS user is being deleted. Use the following code to subscribe:

```C#
using System;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Security.Events;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
        }

        private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            EventHub.Subscribe<UserDeleting>(evt => UserDeletingEventHandler(evt));
        }

        public void UserDeletingEventHandler(UserDeleting eventInfo)
        {
            var user = eventInfo.User;
        }
    }
}
```

In the event handler, you can access the user which is pending for delete.

## UserDeleted

This event fires when a Sitefinity CMS user is already deleted. Use the following code to subscribe:

```C#
using System;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Security.Events;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
        }

        private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            EventHub.Subscribe<UserDeleted>(evt => UserDeletedEventHandler(evt));
        }

        public void UserDeletedEventHandler(UserDeleted eventInfo)
        {
            // your logic
        }
    }
}
```

Your event handler should look like this.

## PasswordRecoveryRequested

This event fires when a password recovery link was sent to a Sitefinity CMS user email. Use the following code to subscribe:

```C#
using System;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Security.Events;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Bootstrapped += Bootstrapper_Bootstrapped;
        }

        private void Bootstrapper_Bootstrapped(object sender, EventArgs e)
        {
            EventHub.Subscribe<PasswordRecoveryRequested>(evt => PasswordRecoveryRequestedEventHandler(evt));
        }

        public void PasswordRecoveryRequestedEventHandler(PasswordRecoveryRequested eventInfo)
        {
            // your logic
        }
    }
}
```
