程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用 ASP.NET Core 3.1 实现自定义登录?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用 ASP.NET Core 3.1 实现自定义登录??

开发过程中遇到如何使用 ASP.NET Core 3.1 实现自定义登录?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用 ASP.NET Core 3.1 实现自定义登录?的解决方法建议,希望对你解决如何使用 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,请注明来意。