O ApplicationSignInManager mantém uma lista de logins bem-sucedidos?

userSteve

Estou usando ApplicationSignInManagerpara autenticar logins de usuários (veja o código abaixo). O que desejo fazer a seguir é evitar que usuários duplicados façam login ao mesmo tempo e também evitar que mais de 10 usuários façam login simultaneamente.

Eu poderia manter minha própria coleção de quais usuários estão atualmente logados e referir-me a isso, mas gostaria de saber se ApplicationSignInManageroferece alguma funcionalidade como essa automaticamente?

// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}


public ApplicationSignInManager SignInManager
{
    get
    {
        return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
    }
    private set { _signInManager = value; }
}

//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    // This doesn't count login failures towards account lockout
    // To enable password failures to trigger account lockout, change to shouldLockout: true
    var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
    switch (result)
    {
        case SignInStatus.Success:
            return RedirectToLocal(returnUrl);
        case SignInStatus.LockedOut:
            return View("Lockout");
        case SignInStatus.RequiresVerification:
            return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
        case SignInStatus.Failure:
        default:
            ModelState.AddModelError("", "Invalid login attempt.");
            return View(model);
    }
}
trailmax

ApplicationSignInManagernão faz nenhuma contagem e não rastreia internamente os usuários conectados. Tudo o que ele faz é criar um cookie de autenticação para o usuário.

Você pode evitar logins simultâneos redefinindo o carimbo de segurança para um usuário antes de criar um cookie:

var loggedinUser = await UserManager.FindAsync(model.UserName, model.Password);
if (loggedinUser != null)
{
    // Now user have entered correct username and password.
    // Time to change the security stamp
    await UserManager.UpdateSecurityStampAsync(loggedinUser.Id);
}

// do sign-in AFTER we have done the update of the security stamp, so the new stamp goes into the cookie
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

Mais sobre isso no meu blog

Para ter um número limitado de usuários logados - você terá que implementar sua própria contagem. Mas você enfrentará um problema ao decidir o que realmente significa "conectado". Ou seja, ter uma guia aberta do navegador conta como conectado? e se essa guia não for usada por 5 minutos? 10? 2 horas? E se o usuário fechasse essa guia sem clicar em "Logout" - o cookie ainda está lá, provavelmente não expirou, mas seu aplicativo nunca recebeu uma mensagem de que o usuário estava offline.

Você precisará tomar essas decisões sozinho, pois não há nada na estrutura que fornecerá essa funcionalidade.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

AccountKIt-Facebook Configure uma página para lidar com logins bem-sucedidos e trocar códigos de autorização por tokens de acesso

Finalizando o filtro em Scala em uma lista após um número de resultados bem-sucedidos

Como registrar o início e o término bem-sucedidos da execução de uma função?

Como obter a lista de nomes de métodos de testes bem-sucedidos em unittest.TestResult?

Por que meus testes foram bem-sucedidos sem uma instância mongodb em execução?

Verifique se uma condição se mantém em uma lista de listas

Por que os dados de resposta da solicitação AJAX vêm com erro e não são bem-sucedidos?

Incapaz de extrair o tempo sozinho apesar de data e data e hora serem bem sucedidos

Como obter logs de eventos CodeDeploy mesmo quando são bem-sucedidos?

Os envios de formulários do Netlify "bem-sucedidos" não aparecem no painel

Python - Classifica uma lista de listas, mas mantém apenas o último item de cada sublista

Python - Classifica uma lista de listas, mas mantém apenas o último item de cada sublista

O Java Iterator mantém referência a elementos de uma lista vinculada?

Converta uma lista de listas stringified em um dataframe enquanto mantém o índice

Como escrever uma condição JavaScript que relata se os comandos git são bem-sucedidos ou falham no terminal?

O Pandas Dataframe mantém as linhas onde os valores de 2 colunas estão em uma lista de casais

Hspec: Como suprimir resultados de teste bem-sucedidos

AJAX sempre pensa que os retornos de php são bem-sucedidos, mesmo após a falha

Como evito o desempacotamento ao converter um vetor de Opções ou Resultados apenas para os valores bem-sucedidos?

Por que as instalações de aplicativos pagos para Android são mais do que pedidos bem-sucedidos?

Onde o Zookeeper mantém a lista de Kafka ACL?

Implementação de lista que mantém a ordem

lista de array não mantém dados

UICollectionView mantém a posição de rolagem da lista horizontal

Como imprimir uma lista aninhada usando fluxo de java onde o objeto mantém uma lista de referências para si

mysql mantém a subconsulta fora de uma junção

A vinculação de contas está falhando para o Google Actions após um código de autenticação e token de acesso bem-sucedidos

Manter as primeiras X palavras nos elementos da lista enquanto mantém a lista em uma dimensão?

O Gradle não tem conhecimento sobre a biblioteca de configuração automática personalizada - os testes falham no Gradle, mas são bem-sucedidos no IDE

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo