Esempio n. 1
0
    /// <summary>
    /// Logout from database. Returns null if already signed out.
    /// </summary>
    /// <returns></returns>
    public virtual async Task <IdentityResult> LogoutAsync()
    {
        var user = await _userManager.FindByNameAsync(_userName).ConfigureAwait(false) ?? throw new MilvaUserFriendlyException(MilvaException.CannotFindEntity);

        if (await _userManager.GetAuthenticationTokenAsync(user, _loginProvier, _tokenName) == null)
        {
            return(null);
        }

        IdentityResult identityResult = null;

        await _contextRepository.ApplyTransactionAsync(async() =>
        {
            if (_useWhiteList)
            {
                if (SignedInUsers.SignedInUserTokens.ContainsKey(user.UserName))
                {
                    SignedInUsers.SignedInUserTokens.Remove(user.UserName);
                }
            }

            _contextRepository.InitializeUpdating <TUser, TKey>(user);

            identityResult = await _userManager.RemoveAuthenticationTokenAsync(user, _loginProvier, _tokenName);

            if (identityResult.Succeeded)
            {
                await _signInManager.SignOutAsync().ConfigureAwait(false);
            }
        }).ConfigureAwait(false);

        return(identityResult);
    }