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

一、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. Docker介绍及安装详解

    1:Docker简介 Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建.管理和编排容器.Docker 是在 GitHub 上开发的 Moby 开源项目的一部分.Docke ...

  2. python编写DDoS攻击脚本

    python编写DDoS攻击脚本 一.什么是DDoS攻击 DDoS攻击就是分布式的拒绝服务攻击,DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式.单一的DoS攻击一般是采用一对一方式的, ...

  3. HCNA Routing&Switching之VLAN间路由

    前文我们了解了二层交换技术vlan相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15091491.html:今天我们来聊一聊不同VLAN间通信相关话题 ...

  4. 关于 pip 的 15 个使用小技巧

    认识pip 众所周知,pip可以对python的第三方库进行安装.更新.卸载等操作,十分方便. pip的全称:package installer for python,也就是Python包管理工具. ...

  5. 高效JAVA之用静态工厂方法代替构造器

    程序员这行干的久了,总会染上一些恶习,我就染上一个让人深恶痛绝,自己却津津乐道的习惯,还不想改的那种,它可以叫做强迫症,也可以叫做洁癖.那就是我不允许我的IDEA出现一点点警告,什么黄色背景,绿色波浪 ...

  6. synchronized优化手段:锁膨胀、锁消除、锁粗化和自适应自旋锁...

    synchronized 在 JDK 1.5 时性能是比较低的,然而在后续的版本中经过各种优化迭代,它的性能也得到了前所未有的提升,上一篇中我们谈到了锁膨胀对 synchronized 性能的提升,然 ...

  7. Python实现猜数字游戏

    Python中实现猜数字游戏代码如下: import random # 引入随机数标准库-random # 定义数字上下限和最大游戏次数 min_num = 1 max_num = 10 guess_ ...

  8. C++ //多态案例 -计算器类(普通写法 和 多态写法) //利用多态实现计算器 //多态好处: //1.组织结构清晰 //2.可读性强 //3.对于前期和后期扩展以及维护性高

    1 //多态案例 -计算器类(普通写法 和 多态写法) 2 3 #include <iostream> 4 #include <string> 5 using namespac ...

  9. 通过Appium日志,分析其运行原理

    1.启动appium: appium的rest http 接口开始监听 4723 端口: 2.运行 python 脚本: appium接收到一个post请求 /wd/hub/session,并携带了 ...

  10. Servlet中的HttpServletResponse 类

    HttpServletResponse 类的作用:              理解:顾名思义 就是响应客户端的内容, HttpServletResponse 类和 HttpServletRequest ...