IMemberManager has a variety of methods that are useful for managing members in controllers and views. In this article, we'll have a look at how some of these can be used.
There are different ways to reference IMemberManager:
Dependency Injection
The recommended way is to create a Controller or Service and inject IMemberManager in the constructor:
MemberAuthenticationController.cs
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.Security;
namespace UmbracoDocs.Samples;
public class MemberAuthenticationController : Controller
{
private readonly IMemberManager _memberManager;
public MemberAuthenticationController(IMemberManager memberManager)
=> _memberManager = memberManager;
}
Views
Alternatively, IMemberManager can be injected directly into a template:
MemberAuthenticationView.cshtml
@using Umbraco.Cms.Core.Security;
@inject IMemberManager _memberManager;
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage
@if (_memberManager.IsLoggedIn())
{
@* Do something when a member is logged in *@
}
It is advisable to implement Controllers to manage this kind of view logic.
Examples
Finding members
IMemberManager has multiple ways to find members.
FindByIdAsync(string)
Finds a member by their ID
var member = await _memberManager.FindByIdAsync("1234");
// Do stuff with the member, for instance checking if email is confirmed
var emailConfirmed = member is not null && member.EmailConfirmed;
If we want to find a member by Udi or Guid we need to inject IIdKeyMap service:
Find member by Udi
var memberUdiAttempt = _idKeyMap.GetIdForUdi(memberUdi);
if (memberUdiAttempt.Success)
{
var memberId = memberUdiAttempt.Result;
var member = await _memberManager.FindByIdAsync(memberId.ToString());
}
Find member by Guid
var memberKeyAttempt = _idKeyMap.GetIdForKey(memberKey, UmbracoObjectTypes.Member);
if (memberKeyAttempt.Success)
{
var memberId = memberKeyAttempt.Result;
var member = await _memberManager.FindByIdAsync(memberId.ToString());
}
FindByEmailAsync(string)
Finds a member by their email.
var member = await _memberManager.FindByEmailAsync("test@member.com");
// Do stuff with the member, for instance checking if email is confirmed
var emailConfirmed = member is not null && member.EmailConfirmed;
FindByNameAsync(string)
Finds a member by their login name.
var member = await _memberManager.FindByNameAsync("TestLoginName");
// Do stuff with the member, for instance checking if email is confirmed
var emailConfirmed = member is not null && member.EmailConfirmed;
AsPublishedMember(MemberIdentityUser)
The IMemberManager methods returns members as MemberIdentityUser.
Since Members Types are defined like Content Types in Umbraco, members can hold any number of properties. To access these properties, it can be beneficial to convert the member into an IPublishedContent instance.
This is done using AsPublishedMember(MemberIdentityUser)::
MemberIdentityUser? member = await _memberManager.FindByEmailAsync("test@member.com");
if (member is not null)
{
IPublishedContent? memberAsContent = _memberManager.AsPublishedMember(member);
// Access member content properties
}
GetCurrentMemberAsync()
Returns the currently logged in member if there is one, else returns null value.
var currentMember = await _memberManager.GetCurrentMemberAsync();
var currentMemberName = currentMember?.Name;
GetUserIdAsync()
Returns the ID of a member.
public async Task<string> GetMemberId(MemberIdentityUser member)
=> await _memberManager.GetUserIdAsync(member);
IsLoggedIn()
Checks if the current request contains a logged-in member.
public async Task<string> GetMemberId(MemberIdentityUser member)
=> await _memberManager.GetUserIdAsync(member);