Хорошо, пока не будет предоставлен код, ответ будет "все зависит", но я постараюсь. Вчера я провел подобное исследование, так что это довольно свежее знание. В качестве предварительного условия я создал новый проект Razor Pages и прошел эти уроки для различных провайдеров .
Во-первых, разные поставщики предоставят вам разные данные. Например, без какой-либо дополнительной настройки вы будете получать имена и фамилии только от Facebook и Google. Чтобы получить имя из Twitter, вам нужно вручную добавить претензию
.AddTwitter(options =>
{
options.ConsumerKey = Configuration["Authentication:Twitter:ConsumerKey"];
options.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"];
options.RetrieveUserDetails = true;
options.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "name");
})
или как-то обработать событие CreatingTicket
. Проблемы не остановятся здесь. В Твиттере они не различают имена и фамилии, поэтому это просто Имя. И глазурь на торте: в Твиттере и Google вы можете стереть свое имя, чтобы в этом случае вы не получили никаких данных.
Во-вторых, хранение данных. Я думаю, что можно просто следовать подходу, предложенному в уже упомянутой статье , и сохранять заявки и / или расширять класс IdentityUser
, который, как я полагаю, является вашим случаем. Я положил вызов обновления пользователей, где они сохранили претензии, в OnPostConfirmationAsync
:
if (result.Succeeded) {
// Save claims. This will populate AspNetUserClaims table
await _userManager.AddClaimsAsync(user,
new []
{
info.Principal.FindFirst(ClaimTypes.GivenName),
info.Principal.FindFirst(ClaimTypes.Surname)
});
// AND/OR save user. This will populate the AspNetUsers table
user.FirstName = info.Principal.FindFirst(ClaimTypes.GivenName).Value;
user.LastName = info.Principal.FindFirst(ClaimTypes.Surname).Value;
await _userManager.UpdateAsync(user);
...
}
Надеюсь, это поможет.