Over the last months, I've been working on moving websites from Umbraco 13 up to Umbraco 17. I had a really hard time to find good documentation on how to work with Members so I figured I'll write a short blog post to fill some of the "gaps" I experienced in the documentation.
What is Member in Umbraco?
A Member in Umbraco is an external or frontend user. In other words, this is the kind of account you would use for things like a customer area, intranet login, gated content, forums, and similar functionality on the public-facing site.
Working with Members programmatically
When working with Umbraco Members programmatically you need to familiarize your self with the IMemberService and the IMemberManager.
- IMemberService is used to work with the IMember object, set username, email and update custom properties.
- IMemberManager is used to perform login, get current member and set password.
Here is a code sample that will create a member programmatically and set the password programmatically.
public class MemberRegistrationService
{
private readonly IMemberService _memberService;
private readonly IMemberManager _memberManager;
private readonly IPasswordHasher _passwordHasher;
public MemberRegistrationService(
IMemberService memberService,
IMemberManager memberManager,
IPasswordHasher passwordHasher
)
{
_memberService = memberService;
_memberManager = memberManager;
_passwordHasher = passwordHasher;
}
public async Task<IMember> CreateMemberAsync(string email, string password, string name)
{
var member = _memberService.CreateMember(
email,
email,
name,
"Member"); // or Member.ModelTypeAlias with ModelsBuilder
member.IsApproved = true;
_memberService.Save(member);
// Optionally add to a role
_memberService.AssignRole(member.Id, "Member");
// Set password
var memberIdentity = await _memberManager.FindByIdAsync(member.Id.ToString());
var passwordResult = await _memberManager.AddPasswordAsync(memberIdentity!, password);
// Alternative way of setting password
member.RawPasswordValue = _passwordHasher.HashPassword(password);
return member;
}
}
..