Как получить доступ к текущим свойствам IdentityUser, если пользователь вошел в систему? - PullRequest
0 голосов
/ 16 апреля 2020

Я создал это приложение, используя шаблон для Blazorwasm по умолчанию с отдельным Auth. Ниже приведены некоторые из моих файлов csproj.

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>


<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="3.2.0-preview3.20168.3" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.1" />
  <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.1" />
</ItemGroup>


<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.1.3" />
<PackageReference Include="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.3">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

</Project>

Я пытаюсь получить свойства из моего ApplicationUser, который происходит от IdentityUser, когда пользователь вошел в систему, конечно. В настоящее время я смотрю на 3 класса (UserManager, SignInManager и ApplicationUser). Также я добавил в ApplicationUser свойство, которое я хочу получить. Это свойство предназначено для запросов к базе данных только для записей со значением этого свойства. Другими словами, значения из таблицы базы данных AspNetUsers.

1 Ответ

0 голосов
/ 16 апреля 2020

Я создал класс обслуживания для обработки этого в моем приложении. С моего контроллера я установил ApplicationUser user, а затем вызвал созданную мной службу user = await this._userServices.GetUserInformation(User) (пользователь с заглавными буквами является вошедшим в систему пользователем)

В классе обслуживания пользователя это то, что у меня есть:

public class UserServices : IUserServices
{
    private UserManager<ApplicationUser> _userManager;

    public UserServices(
        UserManager<ApplicationUser> userManager)
    {
        this._userManager = userManager;
    }

    public async Task<ApplicationUser> GetUserInformation(ClaimsPrincipal userClaim)
    {
        var userId = userClaim?.FindFirst("UserId")?.Value; // returns null if no user logged in
        var user = await _userManager.FindByIdAsync(userId);
        return user;
    }
}

После того, как вы это сделаете, вы можете провести нулевую проверку вашего пользователя.

Полученная отсюда информация о пользователе, которая находится в вашей таблице AspNetUsers, будет иметь поле, которое вы нужно.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...