.net core mvc登录验证

本文仅仅是能够告诉读者怎么用,什么效果,不包含原理讲解。

在java学习中,登录往往是通过cookie,session,过滤器这样的模式完成的,.net core中登录模块完成了非常好的封装,来提供登录校验的这种能力,但是封装太好往往会看不懂,做不出来,本篇文章不讨论内部细节,以一个项目的模式来看看在Visual Studio中如何去使用这个写好的框架。

打开visual studio开始项目的构建

然后选择.net core web

这里我们先不生成登录模块,自己尝试的时候没有界面,不太好理解,我们进去了再用。

一个非常普通的web项目。

装点包

把这些包装上

接下来我们来生成验证模板

如果刚才的包装的没问题的话会有一个identity这个就是验证模板

然后到达了这个界面,让我们生成对应的文件,

登录模块我们往往都放在导航栏上,所以_layout上添加登录时vs默认的模板,我们就选择项目生成的模板就可以了。

这里是在问我们要什么功能,我们一开始就要个登录,退出,注册就可以了。

这里是数据库信息,因为用户信息要存在数据库中,所以我们要一个DbContext对象

点加号来一个就行。

ok,点击add就成了。之后会卡一会儿给你生成文件。

我们生成了一个文件夹,包括了登录要的这些东西,accout下就是我们的界面。

这个时候可以启动看一下。

发现什么都没有。

去文件里面看一下。打开_LoginPartial.cshtml文件。

@using Microsoft.AspNetCore.Identity

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

<ul class="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
    <li class="nav-item">
        <a id="manage" class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
    </li>
    <li class="nav-item">
        <form id="logoutForm" class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
            <button id="logout" type="submit" class="nav-link btn btn-link text-dark">Logout</button>
        </form>
    </li>
}
else
{
    <li class="nav-item">
        <a class="nav-link text-dark" id="register" asp-area="Identity" asp-page="/Account/Register">Register</a>
    </li>
    <li class="nav-item">
        <a class="nav-link text-dark" id="login" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
}
</ul>

发现了有a标签。那么我们自然要把这个东西放到导航栏_layout.cshtml中。下面我们在_layout文件中引入_loginPartial.

再次启动看看

有了,但是没效果。通过查看url发现路由肯定有问题。那么我们打开Startup.cs文件改改路由。

再次跑起来就有效果了。

页面上的问题解决了。该解决数据的问题了。

这个就是刚才生成好的DbContext对象,它里面就包括了验证所需要的表信息。

这个也是生成的,就写了要在哪里去生成表。

就是first code的那一套

实体和表的关系就生成好了。直接生成库吧。

在vs的数据库界面看看,发现生成了一大堆表。

这就好了。

我们在startup中改个点。

一定要用UseAuthentication(),不然登录不了。

然后我们打开HomeController在Index方法上加 [Authorize] 

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using LoginTest.Models;
using Microsoft.AspNetCore.Authorization;

namespace LoginTest.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        [Authorize]
        public IActionResult Index()
        {
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

这就是说明要验证,只有在登录状况下才能访问,不然重定向到登录界面。

代码就完成了,我们试一下看看什么效果。

一进来我们点击导航栏的home发现是去登录界面了。

注册一个一登录(记得在数据库的AspNetUsers表中吧EmailConfirmed的状态改一下不然会被校验卡住)

登录了再点击home就ok了

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值