Asp.Net Core基于Cookie的登录、注销、验证教程

作者 the7
发布于 2020年01月12日
评论 0
浏览 420

登录是用户系统必不可少的功能,Asp.Net Core默认已经集成了Cookie登录验证,使用起来也非常简单,具体看下文。

配置Startup

在startup.cs文件里,找到ConfigureServices方法,添加

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie();

找到 Configure 方法,添加

 app.UseCookiePolicy();
 app.UseAuthentication();

登录

登录过程一般为将用户输入的用户名密码到数据库进行比对,比对成功写入cookie,比对失败就返回错误,代码如下。

public async Task<IActionResult> Login(string username, string password)
{
    var success = db.valid(username,password);//数据库验证
    if(!success)
    {
        return Content("登录失败");
    }
    
    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.Name, username),
        new Claim(ClaimTypes.Role, "Administrator"),
    };

    var claimsIdentity = new ClaimsIdentity(
        claims, CookieAuthenticationDefaults.AuthenticationScheme);

    var authProperties = new AuthenticationProperties
    {
        //AllowRefresh = <bool>,
        //ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(100),
        //IsPersistent = false,
        //IssuedUtc = <DateTimeOffset>,
        //RedirectUri = <string>
    };

    await HttpContext.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme, 
        new ClaimsPrincipal(claimsIdentity), 
        authProperties);
        
    return Content("登录成功");
}

退出

使用SignOutAsync注销当前用户,并删除Cookie

await HttpContext.SignOutAsync(
    CookieAuthenticationDefaults.AuthenticationScheme);

验证

在需要授权的页面,只允许已登录用户进入,这里有两种方式。

  1. 使用AuthorizeAttribute特性,如果未登录会跳转至 /Account/Login?ReturnUrl=path,当然这个地址是可以配置的。

    [Authorize]
    public IActionResult Test()
    {
        //使用Authorize验证
    }
    
  2. 使用HttpContext.User.Identity.IsAuthenticated判断

    if ( HttpContext.User.Identity.IsAuthenticated )
    {
        return Content("已登录");
    }
    return Content("未登录");
    

0条评论

请先登录后发表评论
提交评论
标签云
css (1) less calc (1) C# (4) C#进制转换 (1) asp.net core (8) Authentication (1) 注销 (1) 登录 (1) 验证 (1) scroll-view (1) 微信小程序 (4) 滚动到底部 (1) StackExchange.Redis (1) google (1) 百度 (1) nginx (2) 大文件 (2) 微信小程序c#解密 (1) 微信小程序获取手机号 (1) openid (1) session_key (1) CDN (1) URL鉴权 (1) 阿里云 (1) async (1) await (1) 禁止下拉上滑效果 (1) Index类型 (1) Range类型 (1) dontent publish (1) dotnet publish在线生成器 (1) System.DrawingCore.GDIPlus报错 (1) centos (1) 中文字体 (1) SqlBulkCopy (1) SqlSugar (1) JWT (5) 认证 (3) RSA JWT (1) 非对称加密 (1) 写信 (1) 见字如面 (1) 优化建议 (2) 正确操作字符串 (1) Java (1) JWT退出 (1) RefreshToken (1) .NET Core网站开发框架 (1) Moz (3) 墨子 (1) JSON.NET (1) Newtonsoft (1) System.Text.Json (1) 自定义后台路径 (1) .netcore (1) quartz (2) 作业调度框架 (1) 作业调度 (1) 定时任务 (1) exception (1) 异常处理 (1) HttpClient (1) IHttpClientFactory (1) RDM (1) Redis (1) Redis Desktop Manager (1) RedisDesktopManager (1) linux (1) mac (1) windows (1) Could not get any response (1) postman (1) leetcode (2) 力扣 (1) 回文字符串 (1) 面试刷题 (1) centos7 (1) php安装 (1) 网易云插件 (1) 马甲App (1) Discuz插件 (1) 网易云音乐 (1) Blazor (1) 五子棋 (1) c#解题 (1) 最长连续序列 (1) Swagger (1) 在线文档 (1) blob (1) mp4 (1) 视频 (1) big file (1) 上传 (1) s (1) Azure (1) Azure Key Vault (1) Configuration (1) 密钥保管库 (1) Dapper安装 (1) Dapper是什么 (1) Dapper连接Mysql (1) Dapper连接SqlServer (1) dapper (1)