大佬教程收集整理的这篇文章主要介绍了如何使用 ASP.NET Core 3.1 实现自定义登录?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的本地服务器上有一个测试数据库。在数据库中,我有一个名为“Korisnici”(英文。用户)的表。使用 ENtityFrameworkCore 我从数据库生成了类,这里生成了“Korisnici”类:
public partial class Korisnici
{
public Korisnici()
{
BankovniRacuni = new HashSet<BankovniRacuni>();
Dokumenti = new HashSet<Dokumenti>();
ObracuniZarada = new HashSet<ObracuniZarada>();
Poslodavci = new HashSet<Poslodavci>();
PrihodiPoslodavca = new HashSet<PrihodiPoslodavca>();
RashodiPoslodavca = new HashSet<RashodiPoslodavca>();
Takse = new HashSet<Takse>();
Zaposleni = new HashSet<Zaposleni>();
}
public int id { get; set; }
public String Ime { get; set; }
public String Prezime { get; set; }
[required]
[display(name = "Korisnicko ime")]
public String KorisnickoIme { get; set; }
public String Email { get; set; }
[DataType(DataType.password)]
[display(name = "Lozinka")]
public String Lozinka { get; set; }
public int? TipKorisnika { get; set; }
public virtual TipoviKorisnika TipKorisnikaNavigation { get; set; }
public virtual ICollection<BankovniRacuni> BankovniRacuni { get; set; }
public virtual ICollection<Dokumenti> Dokumenti { get; set; }
public virtual ICollection<ObracuniZarada> ObracuniZarada { get; set; }
public virtual ICollection<Poslodavci> Poslodavci { get; set; }
public virtual ICollection<PrihodiPoslodavca> PrihodiPoslodavca { get; set; }
public virtual ICollection<RashodiPoslodavca> RashodiPoslodavca { get; set; }
public virtual ICollection<Takse> Takse { get; set; }
public virtual ICollection<Zaposleni> Zaposleni { get; set; }
}
此类用作名为“Index.csHTML”的视图的模型:
@model Korisnici
<img src="/Content/images/logoFinal.png" />
<div class="row">
<div class="col-md-8">
<section ID="loginForm">
@using (HTML.beginForm("Login","Account"))
{
@HTMl.AntiForgeryToken()
@HTMl.ValIDationSumMary(true,"",new { @class = "text-danger" })
<div class="form-group">
@HTMl.LabelFor(m => m.KorisnickoIme,new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@HTMl.TextBoxFor(m => m.KorisnickoIme,new { @class = "form-control" })
@HTMl.ValIDationmessageFor(m => m.KorisnickoIme,new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@HTMl.LabelFor(m => m.Lozinka,new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@HTMl.passwordFor(m => m.Lozinka,new { @class = "form-control" })
@HTMl.ValIDationmessageFor(m => m.Lozinka,new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="uloguj se" class="btn btn-priMary" />
</div>
</div>
}
</section>
</div>
</div>
当我单击提交按钮时,会调用来自控制器“AccountControler”的登录操作。
public class AccountController : Controller
{
public IActionResult Index()
{
return VIEw();
}
[httpPost]
public IActionResult Login(Loginviewmodel model)
{
// Acces database and search for account
var dbContext = new administracijaZingDEVDBContext();
var korisnik = dbContext.Korisnici
.Where(k => k.KorisnickoIme == model.KorisnickoImE)
.Where(k => k.Lozinka == model.Lozinka)
.FirstOrDefault();
if (korisnik != null)
{
httpContext.Session.SetString("Username",model.KorisnickoImE);
return RedirectToAction("Index","Main");
}
return RedirectToAction("Index","Home");
}
}
我已将测试数据插入到包含 Korisnici 表的一条记录的数据库中。 当我在登录表单中输入正确的数据时,没有任何反应(用户没有通过登录)。
只是为了检查一下,您创建了迁移文件并更新了数据库等等?
(这应该在评论中,但我缺乏声誉)
你也不应该创建一个新的上下文,而是将它注入你的帐户控制器的构造函数中 (或者更好……您应该注入存储库或更好地使用工作设计和 CQRS 设计单元)
保重,祝你好运。
所以你输入ctor tab tab
哪个会给你
public AccountController(){}
然后在 AccountController 函数中添加一个参数,例如
public AccountController(MyContext context){}
右键单击 => 快速操作和重构 => 创建和分配属性 MyContext
但是您应该至少创建一个存储库模式并注入类似 IKorisniciRepository 的内容。
如果你把你的 repo 放在 gitHub 上会更容易,这样我就可以在写之前测试。
试试
public class AccountController : Controller
{
private readonly AdministracijaZingDEVDBContext Context {get;}
public AccountController (AdministracijaZingDEVDBContext context) {Context = context;}
public IActionResult Index()
{
return View();
}
[httpPost]
public IActionResult Login(LoginViewModel model)
{
// Access database and search for account
var korisnik = Context.Korisnici
.Where(k => k.KorisnickoIme == model.KorisnickoImE)
.Where(k => k.Lozinka == model.Lozinka)
.FirstOrDefault();
if (korisnik != null)
{
httpContext.Session.SetString("UserName",model.KorisnickoImE);
return RedirectToAction("Index","Main");
}
return RedirectToAction("Index","Home");
}
}
以上是大佬教程为你收集整理的如何使用 ASP.NET Core 3.1 实现自定义登录?全部内容,希望文章能够帮你解决如何使用 ASP.NET Core 3.1 实现自定义登录?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。