Merge pull request #12856 from umbraco/v10/bugfix/external_login_token_table

V10: Fix external login token table
This commit is contained in:
Bjarke Berg
2022-08-17 16:53:17 +02:00
committed by GitHub
2 changed files with 26 additions and 12 deletions

View File

@@ -440,15 +440,22 @@ 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;
// The token hasn't changed, so there's no reason for us to re-add it.
if (token.Value == value)
{
return Task.CompletedTask;
}
user.LoginTokens.Remove(token);
}
user.LoginTokens.Add(new IdentityUserToken(loginProvider, name, value, user.Id));
return Task.CompletedTask;
}

View File

@@ -580,15 +580,22 @@ 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;
// The token hasn't changed, so there's no reason for us to re-add it.
if (token.Value == value)
{
return Task.CompletedTask;
}
user.LoginTokens.Remove(token);
}
user.LoginTokens.Add(new IdentityUserToken(loginProvider, name, value, user.Id));
return Task.CompletedTask;
}