Fixes issue with deleting external logins, fixes issue with saving new user logins when creating a new user, fixes issue of not checking if the linked login is already linked.
This commit is contained in:
@@ -96,9 +96,10 @@ namespace Umbraco.Core.Security
|
||||
IsLockedOut = user.IsLockedOut,
|
||||
};
|
||||
|
||||
UpdateMemberProperties(userEntity, user);
|
||||
// we have to remember whether Logins property is dirty, since the UpdateMemberProperties will reset it.
|
||||
var isLoginsPropertyDirty = user.IsPropertyDirty(nameof(BackOfficeIdentityUser.Logins));
|
||||
|
||||
// TODO: We should deal with Roles --> User Groups here which we currently are not doing
|
||||
UpdateMemberProperties(userEntity, user);
|
||||
|
||||
_userService.Save(userEntity);
|
||||
|
||||
@@ -107,6 +108,16 @@ namespace Umbraco.Core.Security
|
||||
//re-assign id
|
||||
user.Id = userEntity.Id;
|
||||
|
||||
if (isLoginsPropertyDirty)
|
||||
{
|
||||
_externalLoginService.Save(
|
||||
user.Id,
|
||||
user.Logins.Select(x => new ExternalLogin(
|
||||
x.LoginProvider,
|
||||
x.ProviderKey,
|
||||
(x is IIdentityUserLoginExtended extended) ? extended.UserData : null)));
|
||||
}
|
||||
|
||||
return Task.FromResult(0);
|
||||
}
|
||||
|
||||
@@ -132,7 +143,7 @@ namespace Umbraco.Core.Security
|
||||
if (found != null)
|
||||
{
|
||||
// we have to remember whether Logins property is dirty, since the UpdateMemberProperties will reset it.
|
||||
var isLoginsPropertyDirty = user.IsPropertyDirty("Logins");
|
||||
var isLoginsPropertyDirty = user.IsPropertyDirty(nameof(BackOfficeIdentityUser.Logins));
|
||||
|
||||
if (UpdateMemberProperties(found, user))
|
||||
{
|
||||
@@ -641,7 +652,7 @@ namespace Umbraco.Core.Security
|
||||
|
||||
//don't assign anything if nothing has changed as this will trigger the track changes of the model
|
||||
|
||||
if (identityUser.IsPropertyDirty("LastLoginDateUtc")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.LastLoginDateUtc))
|
||||
|| (user.LastLoginDate != default(DateTime) && identityUser.LastLoginDateUtc.HasValue == false)
|
||||
|| identityUser.LastLoginDateUtc.HasValue && user.LastLoginDate.ToUniversalTime() != identityUser.LastLoginDateUtc.Value)
|
||||
{
|
||||
@@ -650,33 +661,33 @@ namespace Umbraco.Core.Security
|
||||
var dt = identityUser.LastLoginDateUtc == DateTime.MinValue ? DateTime.MinValue : identityUser.LastLoginDateUtc.Value.ToLocalTime();
|
||||
user.LastLoginDate = dt;
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("LastPasswordChangeDateUtc")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.LastPasswordChangeDateUtc))
|
||||
|| (user.LastPasswordChangeDate != default(DateTime) && identityUser.LastPasswordChangeDateUtc.HasValue == false)
|
||||
|| identityUser.LastPasswordChangeDateUtc.HasValue && user.LastPasswordChangeDate.ToUniversalTime() != identityUser.LastPasswordChangeDateUtc.Value)
|
||||
{
|
||||
anythingChanged = true;
|
||||
user.LastPasswordChangeDate = identityUser.LastPasswordChangeDateUtc.Value.ToLocalTime();
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("EmailConfirmed")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.EmailConfirmed))
|
||||
|| (user.EmailConfirmedDate.HasValue && user.EmailConfirmedDate.Value != default(DateTime) && identityUser.EmailConfirmed == false)
|
||||
|| ((user.EmailConfirmedDate.HasValue == false || user.EmailConfirmedDate.Value == default(DateTime)) && identityUser.EmailConfirmed))
|
||||
{
|
||||
anythingChanged = true;
|
||||
user.EmailConfirmedDate = identityUser.EmailConfirmed ? (DateTime?)DateTime.Now : null;
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("Name")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.Name))
|
||||
&& user.Name != identityUser.Name && identityUser.Name.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
user.Name = identityUser.Name;
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("Email")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.Email))
|
||||
&& user.Email != identityUser.Email && identityUser.Email.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
user.Email = identityUser.Email;
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("AccessFailedCount")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.AccessFailedCount))
|
||||
&& user.FailedPasswordAttempts != identityUser.AccessFailedCount)
|
||||
{
|
||||
anythingChanged = true;
|
||||
@@ -694,32 +705,32 @@ namespace Umbraco.Core.Security
|
||||
}
|
||||
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("UserName")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.UserName))
|
||||
&& user.Username != identityUser.UserName && identityUser.UserName.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
user.Username = identityUser.UserName;
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("PasswordHash")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.PasswordHash))
|
||||
&& user.RawPasswordValue != identityUser.PasswordHash && identityUser.PasswordHash.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
user.RawPasswordValue = identityUser.PasswordHash;
|
||||
}
|
||||
|
||||
if (identityUser.IsPropertyDirty("Culture")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.Culture))
|
||||
&& user.Language != identityUser.Culture && identityUser.Culture.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
user.Language = identityUser.Culture;
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("StartMediaIds")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.StartMediaIds))
|
||||
&& user.StartMediaIds.UnsortedSequenceEqual(identityUser.StartMediaIds) == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
user.StartMediaIds = identityUser.StartMediaIds;
|
||||
}
|
||||
if (identityUser.IsPropertyDirty("StartContentIds")
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.StartContentIds))
|
||||
&& user.StartContentIds.UnsortedSequenceEqual(identityUser.StartContentIds) == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
@@ -732,7 +743,7 @@ namespace Umbraco.Core.Security
|
||||
}
|
||||
|
||||
// TODO: Fix this for Groups too
|
||||
if (identityUser.IsPropertyDirty("Roles") || identityUser.IsPropertyDirty("Groups"))
|
||||
if (identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.Roles)) || identityUser.IsPropertyDirty(nameof(BackOfficeIdentityUser.Groups)))
|
||||
{
|
||||
var userGroupAliases = user.Groups.Select(x => x.Alias).ToArray();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user