C# Aspnet.core程序登录,但考虑同一表中的数据
我的代码有问题,程序登录和注销 当我登录程序登录时,每种类型的用户都有三个控制器,但演示文稿似乎都来自Social表。 我已经检查了表,没有相同的数据,我检查了每种类型用户的视图布局,一切都很好。 有人能帮我修一下吗 登录方法位于控制器主页中,代码如下:C# Aspnet.core程序登录,但考虑同一表中的数据,c#,html,asp.net-core,C#,Html,Asp.net Core,我的代码有问题,程序登录和注销 当我登录程序登录时,每种类型的用户都有三个控制器,但演示文稿似乎都来自Social表。 我已经检查了表,没有相同的数据,我检查了每种类型用户的视图布局,一切都很好。 有人能帮我修一下吗 登录方法位于控制器主页中,代码如下: public IActionResult Login(string user, string password, string? ReturnUrl) { SHA512 sha512 = SHA512M
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);
}
}
public static bool estaAutenticado(HttpContext contexto)
{
if (contexto.Session.GetInt32("UserId") != null)
return true;
else
return false;
}
在布局中,我必须区分登录的类型,显示每个控制器对应的视图
<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>
有人能帮我修一下吗?我不明白为什么他认为我登录的所有用户都是合作伙伴,即使他们来自教师或管理员表。问题是,您为每种类型的用户设置了相同的会话密钥
UserId
,您应该进行如下修改:
登录方法
每个类型控制器中的estaAutenticado方法
问题是您为每种类型的用户设置了相同的会话密钥
UserId
,您应该进行如下修改:
登录方法
每个类型控制器中的estaAutenticado方法
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");
}
//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;
}