目前用户管理的增删改查及登录功能已经全部实现,但存在一个问题,登录后要取消登录按钮显示退出按钮,未登录应该有注册按钮,现实现过程如下

一、Startup.cs中增加服务

app.UseAuthentication();

二、修改用户管理主页

注入服务

@inject SignInManager<IdentityUser> SignInManager

修改视图代码,判断当前用户是否登录

@if (SignInManager.IsSignedIn(User)) { <form asp-action="Logout" method="post" id="logoutForm"> <a href="javascript:document.getElementById('logoutForm').submit()">退出</a> </form> } else { <a asp-action="Register">注册</a> <a asp-action="Login">登录</a> }

登录及未登录显示效果

修改后完整代码

@using Microsoft.AspNetCore.Identity
@model IEnumerable<Microsoft.AspNetCore.Identity.IdentityUser>
@inject SignInManager<IdentityUser> SignInManager
@{
ViewData["Title"] = "Index";
} <h1>Index</h1>
<h1>@ViewData["User"]</h1>
@if (SignInManager.IsSignedIn(User))
{
<form asp-action="Logout" method="post" id="logoutForm">
<a href="javascript:document.getElementById('logoutForm').submit()">退出</a>
</form>
}
else
{
<a asp-action="Register">注册</a>
<a asp-action="Login">登录</a>
}
<table class="table table-bordered">
<tr>
<th>@Html.DisplayNameFor(u => u.Id)</th>
<th>@Html.DisplayNameFor(u => u.UserName)</th>
<th>@Html.DisplayNameFor(u => u.Email)</th>
<th>@Html.DisplayNameFor(u => u.PhoneNumber)</th>
<th>操作</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.UserName</td>
<td>@item.Email</td>
<td>@item.PhoneNumber</td>
<td>
<a asp-action="EditUser" asp-route-id="@item.Id" type="button" class="btn btn-success btn-xs">修改</a>
<a asp-action="Delete" asp-route-id="@item.Id" type="button" class="btn btn-danger btn-xs" size="">删除</a>
</td>
</tr>
}
</table>

也可以把用户列表中加上如果没有登录不显示编辑、删除按钮

@using Microsoft.AspNetCore.Identity
@model IEnumerable<IdentityUser>
@inject SignInManager<IdentityUser> SignInManager
@{
ViewData["Title"] = "Index";
} <h1>Index</h1> @if (SignInManager.IsSignedIn(User))
{
<form asp-action="Logout" method="post" id="logoutForm">
<a href="javascript:document.getElementById('logoutForm').submit()">退出</a>
</form>
}
else
{
<a asp-action="Register">注册</a>
<a asp-action="Login">登录</a>
}
<table class="table table-bordered">
<tr>
<th>@Html.DisplayNameFor(u => u.Id)</th>
<th>@Html.DisplayNameFor(u => u.UserName)</th>
<th>@Html.DisplayNameFor(u => u.Email)</th>
<th>@Html.DisplayNameFor(u => u.PhoneNumber)</th>
@if (SignInManager.IsSignedIn(User))
{
<th>操作</th>
}
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.UserName</td>
<td>@item.Email</td>
<td>@item.PhoneNumber</td>
@if (SignInManager.IsSignedIn(User))
{
<td>
<a asp-action="EditUser" asp-route-id="@item.Id" type="button" class="btn btn-success btn-sm ">修改</a>
<a asp-action="Delete" asp-route-id="@item.Id" type="button" class="btn btn-danger btn-sm">删除</a>
</td>
}
</tr>
}
</table>

修改后的视图

未登录

登录后显示

熟悉工作流程后上述代码可直接使用新建asp.net core项目中的个人验证,自动配置好以上基础框架

Identity用户管理入门六(判断是否登录)的更多相关文章

  1. Identity用户管理入门二(显示用户列表)

    在Controllers中新建AccountController,并在构造方法(函数)中注入SignInManager,UserManager UserManager   用户管理(注册,查找,修改, ...

  2. Identity用户管理入门五(登录、注销)

    一.建立LoginViewModel视图模型 using System.ComponentModel.DataAnnotations; namespace Shop.ViewModel { publi ...

  3. Identity用户管理入门七(扩展用户字段)

    在实际使用时会发现很多字段在IdentityUser中并不存在,比如增加生日,地址等字段,可在模型类中实现自己的模型并继承自IdentityUser,需要修改的代码为以下类 一.新增模型 using ...

  4. Identity用户管理入门三(注册用户)

    用户注册主要有2个方法,1.密码加密 2.用户注册 3.ASP.NET Core Identity 使用密码策略.锁定和 cookie 配置等设置的默认值. 可以在类中重写这些设置 Startup(官 ...

  5. Identity用户管理入门一(框架搭建)

    理论知识微软官方文档最完整,最详细,这里只一步步的介绍如何使用,地址:https://docs.microsoft.com/zh-cn/aspnet/core/security/authenticat ...

  6. Identity用户管理入门四(修改、删除用户)

    修改用户不能修改Id及用户名所以创建视图模型时需要去除,新增用户跟修改用户基本视图一直,所以不再做演示 一.新建UpdateUserViewModel视图模型 using System.Compone ...

  7. oracle用户管理入门

    1.创建一个新用户(普通) create user 用户名 identified by 密码 示例,创建一个名叫小明的用户,密码为xm 2.以管理员的身份给普通用户修改密码(当普通用户忘掉自己的密码时 ...

  8. RDIFramework.NET ━ 9.3 用户管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.3  用户管理 -Web部分 用户管理模块主要是对可登录系统的用户进行管理.后续的工作如:用户归属角色.权限的分配.用户所拥有 ...

  9. sybase用户管理(创建、授权、删除)

    一.登录用户管理:1.创建用户:sp_addlogin loginame, passwd [, defdb] [, deflanguage] [, fullname] [, passwdexp] [, ...

随机推荐

  1. JS替换字符

    var msg='A|B|C|D|E|F|G'; 方式1: var newMsg=msg.replace("|",""); 方式2: ps:适用特殊字符 var ...

  2. 透视RPC协议:SOFA-BOLT协议源码分析

    前提 最近在看Netty相关的资料,刚好SOFA-BOLT是一个比较成熟的Netty自定义协议栈实现,于是决定研读SOFA-BOLT的源码,详细分析其协议的组成,简单分析其客户端和服务端的源码实现. ...

  3. java.lang.RuntimeException: Cannot create a secure XMLInputFactory 解决

    客户端调用服务端cxf,服务端报 java.lang.RuntimeException: Cannot create a secure XMLInputFactory 我的cxf 版本 为  3.0. ...

  4. SQL语句(一)基础查询与过滤数据

    目录 一.数据库测试表 二.基础查询 1. 获得需要的记录的特定字段 2. 查询常量值 3. 查询表达式 4. 查询函数 5. 起别名 6. 去重 7. CONCAT函数的简单使用 三.过滤数据 大纲 ...

  5. 跟你说个笑话,硕士毕业两年,月薪10k,天天面向CV编程

    "枯燥乏味的一天,又tm要开始了". 早上10:00,程序员毛毛带着路上买的早餐,打开24英寸的显示屏,去某论坛查一下昨天没有解决的bug. 9 个小时增删改查.搬砖写代码的一天又 ...

  6. ES6继承和ES5继承是完全一样的么?

    继承方式 ES5 prototype 继承 通过原型链(构造函数 + [[prototype]])指向实现继承. (备注:后续__proto__我都会写成[[prototype]]这种形式) 子类的 ...

  7. shell趣味实验——图形

    目录 一.直线 二.矩形 2.1.镂空矩形 三.直角三角形 3.1.倒直角三角形 3.2.反直角三角形 3.3.等腰三角形 3.4.倒等腰三角形 3.5.菱形 四.平行四边形 五.梯形 5.1.等腰梯 ...

  8. OSPF的Router-Id

    一.实验拓扑 二.实验编址 三.实验步骤: 1.设置PC的IP等信息 2.启动设备(全选) 3.根据实验编址配置路由器端口IP(先不设置lookback端口) R1: R2: R3: R4: 看一下r ...

  9. 题解 Time

    传送门 首先枚举最大值,两边分别求逆序对的做法是错误的,这里是来自战神的hack数据 1 2 100 99 98 3 97 96 95 94 93 92 91 显然3应该跨过最大值到左边去,所以这个做 ...

  10. 公司新来了一个质量工程师,说团队要保证 0 error,0 warning

    摘要:静态代码检查又称为静态程序分析,是指在不运行计算机程序的条件下,进行程序分析的方法. 本文分享自华为云社区<公司新来了一个质量工程师,说团队要保证 0 error,0 warning> ...