Merge v10/dev into infrastructure

This commit is contained in:
Nikolaj Geisle
2022-03-16 14:39:28 +01:00
481 changed files with 13916 additions and 6767 deletions

View File

@@ -181,6 +181,7 @@ namespace Umbraco.Cms.Core.Security
{
// we have to remember whether Logins property is dirty, since the UpdateMemberProperties will reset it.
var isLoginsPropertyDirty = user.IsPropertyDirty(nameof(MemberIdentityUser.Logins));
var isTokensPropertyDirty = user.IsPropertyDirty(nameof(MemberIdentityUser.LoginTokens));
MemberDataChangeType memberChangeType = UpdateMemberProperties(found, user);
if (memberChangeType == MemberDataChangeType.FullSave)
@@ -203,6 +204,16 @@ namespace Umbraco.Cms.Core.Security
x.ProviderKey,
x.UserData)));
}
if (isTokensPropertyDirty)
{
_externalLoginService.Save(
found.Key,
user.LoginTokens.Select(x => new ExternalLoginToken(
x.LoginProvider,
x.Name,
x.Value)));
}
}
return Task.FromResult(IdentityResult.Success);
@@ -545,7 +556,38 @@ namespace Umbraco.Cms.Core.Security
return found!;
}
private MemberIdentityUser? AssignLoginsCallback(MemberIdentityUser? user)
/// <summary>
/// Overridden to support Umbraco's own data storage requirements
/// </summary>
/// <remarks>
/// The base class's implementation of this calls into FindTokenAsync and AddUserTokenAsync, both methods will only work with ORMs that are change
/// tracking ORMs like EFCore.
/// </remarks>
/// <inheritdoc />
public override Task SetTokenAsync(MemberIdentityUser user, string loginProvider, string name, string value, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
ThrowIfDisposed();
if (user == null)
{
throw new ArgumentNullException(nameof(user));
}
IIdentityUserToken token = user.LoginTokens.FirstOrDefault(x => x.LoginProvider.InvariantEquals(loginProvider) && x.Name.InvariantEquals(name));
if (token == null)
{
user.LoginTokens.Add(new IdentityUserToken(loginProvider, name, value, user.Id));
}
else
{
token.Value = value;
}
return Task.CompletedTask;
}
private MemberIdentityUser AssignLoginsCallback(MemberIdentityUser? user)
{
if (user != null)
{