[英]The Aspnet.core program logs in but considers the data in the same table
我的代碼有問題,程序登錄和退出我為每種類型的用戶提供三個控制器,當我登錄時,程序登錄但演示文稿好像它們都來自 Socio 表。 我已經檢查了表格並且沒有相同的數據,我檢查了每種類型用戶的視圖布局,一切都很好。 有人可以幫我解決這個問題嗎?
登錄方法在控制器主頁中,這是代碼:
public IActionResult Login(string user, string password, string? ReturnUrl)
{
SHA512 sha512 = SHA512Managed.Create();
byte[] bytes = sha512.ComputeHash(Encoding.UTF8.GetBytes(password), 0, Encoding.UTF8.GetByteCount(password));
string passHash = Convert.ToBase64String(bytes);
Socios socio = _context.Socios.Include(s => s.Gerir).Include(s => s.Mensagem).Include(s => s.Participa).Include(s => s.PersonalTrainer).Include(s => s.Peso).Include(s => s.PlanosExercicios).FirstOrDefault(s => s.NomeUtilizador == user && s.Password == password);
if (socio != null)
{
HttpContext.Session.SetString("Nome", socio.NomeUtilizador);
HttpContext.Session.SetInt32("UserId", socio.Idsocio);
HttpContext.Session.SetString("Perfil", "Socio");
}
Professores prof = _context.Professores.Include(p => p.MapaAulasGrupo).Include(p => p.Mensagem).Include(p => p.Peso).Include(s => s.PersonalTrainer).Include(p => p.PlanosExercicios).FirstOrDefault(p => p.Nome == user && p.Password == password);
if (prof != null)
{
HttpContext.Session.SetString("Nome", prof.Nome);
HttpContext.Session.SetInt32("UserId", prof.Idprofessor);
HttpContext.Session.SetString("Perfil", "Professor");
}
Administrador admin = _context.Administrador.Include(a => a.Gerir).SingleOrDefault(a => a.Nome == user && a.Password == password);
if (admin != null)
{
HttpContext.Session.SetString("Nome", admin.Nome);
HttpContext.Session.SetInt32("UserId", admin.Idadministrador);
HttpContext.Session.SetString("Perfil", "Administrador");
}
if (String.IsNullOrEmpty(ReturnUrl))
{
//ModelState.AddModelError("","Utilizador inexistente na base de dados!");
//TempData["mensagemErro"] = "Utilizador inexistente na base de dados!";
//return View("NaoEncontrado","Socios");
return LocalRedirect("/");
}
else
{
return LocalRedirect(ReturnUrl);
}
}
在布局中我必須區分登錄的類型,呈現與每個控制器對應的視圖
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-dark bg-dark border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index"> </a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
<ul class="navbar-nav">
@if (SociosController.estaAutenticado(Context))
{
<li class="nav-item">
<a class="nav-link text-white" asp-controller="Socios" asp-action="PerfilSocio">Meu perfil</a>
</li>
<li class="nav-item">
<a class="nav-link text-white" asp-controller="Socios" asp-action="ListarProfessores">Professores</a>
</li>
<li class="nav-item">
<p class="nav-link text-white">Bem-vindo, @Context.Session.GetString("Nome")</p>
</li>
<li class="nav-item">
<form class="form-inline" asp-controller="Home" asp-action="Logout">
<button type="submit" class="nav-link btn btn-link text-white">Sair</button>
</form>
</li>
}
else if (ProfessoresController.estaAutenticado(Context))
{
<li class="nav-item">
<a class="nav-link text-white" asp-controller="Professores" asp-action="Perfil">Meu perfil</a>
</li>
<li class="nav-item">
<p class="nav-link text-white">Bem-vindo, @Context.Session.GetString("Nome")</p>
</li>
<li class="nav-item">
<form class="form-inline" asp-controller="Home" asp-action="Logout">
<button type="submit" class="nav-link btn btn-link text-white">Sair</button>
</form>
</li>
}
else if (AdministradoresController.estaAutenticado(Context))
{
<li class="nav-item">
<a class="nav-link text-white" asp-controller="Administradores" asp-action="Perfil">Meu perfil</a>
</li>
<li class="nav-item">
<p class="nav-link text-white">Bem-vindo, @Context.Session.GetString("Nome")</p>
</li>
<li class="nav-item">
<form class="form-inline" asp-controller="Home" asp-action="Logout">
<button type="submit" class="nav-link btn btn-link text-white">Sair</button>
</form>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-white" asp-controller="Home" asp-action="Login">Entrar </a>
</li>
<li class="nav-item">
<a class="nav-link text-white" asp-area="" asp-controller="Home" asp-action="Registo">Registar</a>
</li>
}
</ul>
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-white" asp-area="" asp-controller="Home" asp-action="Index">Pagina Inicial</a>
</li>
<li class="nav-item">
<a class="nav-link text-white" asp-area="" asp-controller="Home" asp-action="Info">Sobre nós</a>
</li>
<li class="nav-item">
<a class="nav-link text-white" asp-area="" asp-controller="Home" asp-action="AulasDeGrupo">Aulas de Grupo</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
在布局“estaAutenticado”中調用的函數可以在每種類型的用戶的控制器中找到,這是代碼:
public static bool estaAutenticado(HttpContext contexto)
{
if (contexto.Session.GetInt32("UserId") != null)
return true;
else
return false;
}
有人可以幫我解決這個問題嗎? 我不明白為什么他將我登錄的所有用戶都視為合作伙伴,即使他們來自教師或管理員表。
問題是您為每種類型的用戶設置了相同的 Session-key UserId
,您應該進行如下修改:
登錄方式
Socios socio = _context.Socios.Include(s => s.Gerir).Include(s => s.Mensagem).Include(s => s.Participa).Include(s => s.PersonalTrainer).Include(s => s.Peso).Include(s => s.PlanosExercicios).FirstOrDefault(s => s.NomeUtilizador == user && s.Password == password);
if (socio != null)
{
HttpContext.Session.SetString("Nome", socio.NomeUtilizador);
HttpContext.Session.SetInt32("UserId", socio.Idsocio);
HttpContext.Session.SetString("Perfil", "Socio");
}
Professores prof = _context.Professores.Include(p => p.MapaAulasGrupo).Include(p => p.Mensagem).Include(p => p.Peso).Include(s => s.PersonalTrainer).Include(p => p.PlanosExercicios).FirstOrDefault(p => p.Nome == user && p.Password == password);
if (prof != null)
{
HttpContext.Session.SetString("Nome", prof.Nome);
//set ProfessorId for Professores
HttpContext.Session.SetInt32("ProfessorId", prof.Idprofessor);
HttpContext.Session.SetString("Perfil", "Professor");
}
Administrador admin = _context.Administrador.Include(a => a.Gerir).SingleOrDefault(a => a.Nome == user && a.Password == password);
if (admin != null)
{
HttpContext.Session.SetString("Nome", admin.Nome);
//set AdminId for Administrador
HttpContext.Session.SetInt32("AdminId", admin.Idadministrador);
HttpContext.Session.SetString("Perfil", "Administrador");
}
每種類型控制器中的 estaAutenticado 方法
//SociosController
public static bool estaAutenticado(HttpContext context)
{
if (context.Session.GetInt32("UserId") != null)
return true;
else
return false;
}
//ProfessoresController
public static bool estaAutenticado(HttpContext context)
{
if (context.Session.GetInt32("ProfessorId") != null)
return true;
else
return false;
}
//AdministradoresController
public static bool estaAutenticado(HttpContext context)
{
if (context.Session.GetInt32("AdminId") != null)
return true;
else
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.