Asp.Net Core Identity Async Overhead в пользовательских хранилищах - PullRequest
0 голосов
/ 20 октября 2018

При разработке основного веб-приложения Asp.Net мне нужно было добавить базовую идентификацию Asp.Net в мой проект.Однако мне понадобилась лишь небольшая часть удостоверений, потому что, например, я знаю, что это приложение никогда не разрешит сторонние входы в систему.Поэтому я решил написать свои кастомные магазины.В поисках хороших решений в Интернете о том, как это сделать, я часто видел такую ​​реализацию:

    public Task SetUserNameAsync(ApplicationUser user, string userName, CancellationToken cancellationToken)
    {
        cancellationToken.ThrowIfCancellationRequested();

        if (user == null)
            throw new ArgumentNullException(nameof(user));

        if(string.IsNullOrWhiteSpace(userName))
            throw new ArgumentNullException(nameof(userName));

        user.Username = userName;

        return Task.CompletedTask;
    }

или

    public Task<string> GetUserNameAsync(ApplicationUser user, CancellationToken cancellationToken)
    {
        cancellationToken.ThrowIfCancellationRequested();

        if (user == null)
            throw new ArgumentNullException(nameof(user));

        return Task.FromResult(user.Username);
    }

, насколько я понимаю, это будет вызваномода, подобная этой:

var user = await store.GetUserNameAsync(_user, CancellationToken.None);

, но разве это не создаст State Mashine для геттера / установщика, который должен просто немедленно вернуться без каких-либо больших накладных расходов, или есть какая-то хорошая выгода, если я сделаю это так, что ясейчас не вижу?

1 Ответ

0 голосов
/ 20 октября 2018

Идентичность - это структура, которая легко настраивается.Например, вы можете создать свой собственный UserManager, все еще используя стандартный SignInManager, который обрабатывает вход в систему, выход из системы, ...

То, что вы нашли, похоже, является реализацией UserManager.GetUserNameAsync ()> https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1.getusernameasync?view=aspnetcore-2.1

* 1005Причина, по которой этот метод возвращает задачу, заключается в том, что для реализации может потребоваться дБ или доступ к сети.

Если вы действительно не хотите использовать что-либо с идентичностью и делать все самостоятельно, нет необходимости возвращать задание.Но чтобы быть искренним, я бы посоветовал подумать дважды, если это хороший подход.

...