Ensure that LoginTokens gets marked as dirty

Might want to experiment with only removing/updating if the value is different
This commit is contained in:
Nikolaj
2022-08-16 15:47:01 +02:00
parent 61f8007c6b
commit e2f5c93528
2 changed files with 14 additions and 12 deletions

View File

@@ -440,15 +440,16 @@ public class BackOfficeUserStore : UmbracoUserStore<BackOfficeIdentityUser, Iden
IIdentityUserToken? token = user.LoginTokens.FirstOrDefault(x =>
x.LoginProvider.InvariantEquals(loginProvider) && x.Name.InvariantEquals(name));
if (token == null)
// We have to remove token and then re-add to ensure that LoginTokens are dirty, which is required for them to save
// This is because we're using an observable collection, which only cares about added/removed items.
if (token is not null)
{
user.LoginTokens.Add(new IdentityUserToken(loginProvider, name, value, user.Id));
}
else
{
token.Value = value;
user.LoginTokens.Remove(token);
}
user.LoginTokens.Add(new IdentityUserToken(loginProvider, name, value, user.Id));
return Task.CompletedTask;
}

View File

@@ -580,15 +580,16 @@ public class MemberUserStore : UmbracoUserStore<MemberIdentityUser, UmbracoIdent
IIdentityUserToken? token = user.LoginTokens.FirstOrDefault(x =>
x.LoginProvider.InvariantEquals(loginProvider) && x.Name.InvariantEquals(name));
if (token == null)
// We have to remove token and then re-add to ensure that LoginTokens are dirty, which is required for them to save
// This is because we're using an observable collection, which only cares about added/removed items.
if (token is not null)
{
user.LoginTokens.Add(new IdentityUserToken(loginProvider, name, value, user.Id));
}
else
{
token.Value = value;
user.LoginTokens.Remove(token);
}
user.LoginTokens.Add(new IdentityUserToken(loginProvider, name, value, user.Id));
return Task.CompletedTask;
}