【发布时间】:2020-09-14 08:11:03
【问题描述】:
在 ASP.NET Core MVC 中,我在创建登录面板时遇到了麻烦,我在用户登录帐户后使用会话并将会话值存储在 ViewBag 中。但是 ViewBag 在里面没有得到任何值,而是在里面得到了 null 值。
这是控制器
[HttpPost]
public IActionResult Login(userModel model)
{
var findValue = _context.users.Any(o => o.username == model.username);
var findValue2 = _context.users.Any(o => o.password == model.password);
if (findValue && findValue2)
{
HttpContext.Session.SetString("Username", model.username);
}
return View(model);
}
public IActionResult Index()
{
ViewBag.Username = HttpContext.Session.GetString("Username");
return View();
}
这是视图 索引.cshtml
@model ComplaintManagement.Models.userModel
@{
ViewData["Title"] = "Portal";
}
<h1>Welcome @ViewBag.Username</h1>
登录.cshtml
@model ComplaintManagement.Models.userModel
@{
ViewData["Title"] = "Login";
}
<div class="row mb-3">
<div class="col-lg-4"></div>
<div class="col-lg-4 border login" style="background-color: #d3d1d1;">
<h4 class="mt-3 text-center">
<i class="fa fa-lg fa-user text-secondary"></i><br />
Login
</h4>
<hr />
<form method="post" asp-action="Index" asp-controller="Portal">
<div class="text-danger"></div>
<div class="text-warning">@ViewBag.Name</div>
<div class="form-group">
<label class="mt-4 asp-for=" username"">Username</label>
<input class="form-control" type="text" required="required" asp-for="username" />
<span></span>
</div>
<div class="form-group">
<label class="mt-4" asp-for="password">Password</label>
<input type="password" class="form-control" required="required" asp-for="password" />
<span></span>
</div>
<center>Don't have an account? <a asp-controller="Portal" asp-action="Register">Register here</a>.</center>
<center><button value="login" class="btn btn-primary mt-3 w-25 mb-3 align-content-center">Login</button></center>
</form>
</div>
<div class="col-lg-4"></div>
</div>
【问题讨论】:
-
var findValue = _context.users.Any(o => o.username == model.username); var findValue2 = _context.users.Any(o => o.password == model.password);看起来无法正常工作。第一个查询将找到具有给定用户名的任何用户。第二个将找到具有给定密码的任何用户。不能保证两个查询都能找到相同的用户。你需要重新思考逻辑。 (此外,以纯文本形式存储密码也是一个很大的安全错误)。 -
但是……你为什么还要尝试构建自己的登录系统呢? ASP.NET 带有它的身份特性,它将立即为您的应用程序添加现成的、安全的登录功能。它已经解决了尝试构建登录系统时可能发生的所有错误和安全问题(例如我提到的那个),包括您可能还没有想到的更多问题,并且具有它需要的功能你创造了很久。如果您需要,它也可以自定义。几乎没有理由不使用它。
-
你能分享你的 Startup.cs 文件吗?或者你可以参考这个话题:docs.microsoft.com/en-us/aspnet/core/fundamentals/…。因为我有一种预感,你没有配置为使用 Session
标签: c# asp.net-core model-view-controller