Net Core操作数据库 + JWT登录

一、创建项目

我这里使用的.Net Core 3.1
在这里插入图片描述在这里插入图片描述
再建两个文件夹用来保存控制器和类
在这里插入图片描述
依赖包
在这里插入图片描述

二、创建实体类 映射数据库

在这里插入图片描述
ToTable表名 ,HasColumnName中映射数据库中的列名,大小写保持一致
在这里插入图片描述

三、配置appsettings.json建立数据库连接

  "ConnectionStrings": {
    "DBConnection": "User Id=ADMIN;Password=666666;Data Source=127.0.0.1/ORCL"
  },

在这里插入图片描述

四、JWT配置

配置Jwt身份验证
在这里插入图片描述

创建一个Jwt映射类

 public class JwtParam
    {
        public bool ValidateIssuerSigningKey { get; set; }
        public string ValidIssuerSigningKey { get; set; }
        public bool ValidateIssuer { get; set; }
        public string ValidIssuer { get; set; }
        public bool ValidateAudience { get; set; }
        public string ValidAudience { get; set; }
        public bool ValidateLifetime { get; set; }
        public uint ValidLifetime { get; set; }
    }

Startup.cs中身份认证
在这里插入图片描述

五、登录

创建控制器 LoginController.cs

 //[Authorize]  ///Jwt权限
    [ApiController]
    [Route("[controller]/[action]")]
    public class LoginController : Controller
    {
        private readonly NetCoreContext _db;
        private readonly JwtParam _jwtParam;
        private readonly IConfiguration _cfg;
        public LoginController(NetCoreContext db, JwtParam jwtParam, IConfiguration cfg)
        {
            _db = db;
            _cfg = cfg;
            _jwtParam = jwtParam;
        }
        [HttpPost]
        //[AllowAnonymous]  //跳过jwt权限验证
        public async Task<ActionResult> Login([FromBody] User _user)
        {
            var user = await _db.User.FirstOrDefaultAsync(x => x.UserName == _user.UserName);
            if (user == null)
            {
                return Ok(new { status = "NoUserName" });
            }

            if (user.PassWord != _user.PassWord)
            {
                return Ok(new { status = "ErrorPassword" });
            }

            var token = new JwtSecurityTokenHandler().CreateToken(new SecurityTokenDescriptor
            {
                Audience = _jwtParam.ValidAudience,
                Issuer = _jwtParam.ValidIssuer,
                SigningCredentials = new SigningCredentials(
                    new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtParam.ValidIssuerSigningKey)),
                    SecurityAlgorithms.HmacSha256),
                Subject = new ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.Name, user.UserName),
                    new Claim("name", user.UserName.ToString())
                })
            });

            return Ok(new
            {
                status = "Ok",
                token = new JwtSecurityTokenHandler().WriteToken(token),
            });
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值