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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user