开源 示例代码:https://github.com/linezero/NancyDemo

上篇讲解Nancy的Basic Authentication,现在来学习Nancy 的Forms身份认证。

本篇主要讲解Forms authentication ,Forms身份认证

说明:本篇示例是基于 Nancy 1.4.3。Nancy 2.0预览版 已经发布,版本改动较大,故特此说明。

准备

安装 Nancy.Authentication.Forms

  1. Install-Package Nancy.Authentication.Forms -Version 1.4.1

实战

继续在示例中添加代码,没有新建项目。

1.实现 IUserMapper 接口

新建一个 FormsUserMapper 类实现接口 IUserMapper

  1. public class FormsUserMapper : IUserMapper
  2. {
  3. private static List<Tuple<string, string, Guid>> users = new List<Tuple<string, string, Guid>>();
  4.  
  5. public FormsUserMapper()
  6. {
  7. users.Add(new Tuple<string, string, Guid>("linezero", "demo", new Guid("19FF111D-DCF5-4FFC-9CFA-4C256E7C9748")));
  8. users.Add(new Tuple<string, string, Guid>("nancy", "demo", new Guid("18FF111D-DCF5-4FFC-9CFA-4C256E7C9748")));
  9. }
  10.  
  11. public IUserIdentity GetUserFromIdentifier(Guid identifier, NancyContext context)
  12. {
  13. var userRecord = users.Where(u => u.Item3 == identifier).FirstOrDefault();
  14.  
  15. return userRecord == null
  16. ? null
  17. : new FormsUser { UserName = userRecord.Item1 };
  18. }
  19.  
  20. public static Guid? ValidateUser(string username, string password)
  21. {
  22. var userRecord = users.Where(u => u.Item1 == username && u.Item2 == password).FirstOrDefault();
  23.  
  24. if (userRecord == null)
  25. {
  26. return null;
  27. }
  28.  
  29. return userRecord.Item3;
  30. }
  31. }

这里我简单的写了个多个用户,而不是之前的单个用户。

Nancy身份认证都涉及到IUserIdentity 接口,这里我为了区分之前的Basic 认证,新建了一个FormsUser 类实现IUserIdentity。

2.添加登录登出

添加一个module ,来实现登录登出。

新建FormsModule 类,并建立对应文件夹。

新建一个登录页:

  1. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <meta charset="utf-8" />
  4. <title>登录</title>
  5. </head>
  6. <body>
  7. <form method="post">
  8. Username
  9. <input type="text" name="Username" />
  10. <br />
  11. Password
  12. <input name="Password" type="password" />
  13. <br />
  14. Remember Me
  15. <input name="RememberMe" type="checkbox" value="True" />
  16. <br />
  17. <input type="submit" value="Login" />
  18. </form>
  19. @if (Model.Errored)
  20. {
  21. <div id="errorBox" class="floatingError">用户名或密码错误</div>
  22. }
  23. </body>
  24. </html>

接受登录信息:

  1. Post["/login"] = r =>
  2. {
  3. var userGuid = FormsUserMapper.ValidateUser((string)this.Request.Form.Username, (string)this.Request.Form.Password);
  4.  
  5. if (userGuid == null)
  6. {
  7. return this.Context.GetRedirect("~/forms/login?error=true&username=" + (string)this.Request.Form.Username);
  8. }
  9.  
  10. DateTime? expiry = null;
  11. if (this.Request.Form.RememberMe.HasValue)
  12. {
  13. expiry = DateTime.Now.AddDays();
  14. }
  15.  
  16. return this.Login(userGuid.Value, expiry);
  17. };

更多详细代码,请看示例代码。

3.配置启用Forms身份认证

在Bootstrapper 的ApplicationStartup 添加如下代码:

  1. container.Register<IUserMapper, FormsUserMapper>();//Forms 认证
  2. var formsAuthConfiguration = new FormsAuthenticationConfiguration()
  3. {
  4. RedirectUrl = "~/forms/login",
  5. UserMapper = container.Resolve<IUserMapper>(),
  6. };
  7. FormsAuthentication.Enable(pipelines, formsAuthConfiguration);//启用Forms 认证

在需要授权的Module 加上就可以开启。

  1. this.RequiresAuthentication();

由于示例代码存在Basic 认证,我将其注释了。只保留Forms。

4.实现效果

访问: http://localhost:9000/

成功登录后 访问:http://localhost:9000/forms/

示例代码下载:https://github.com/linezero/NancyDemo

示例代码包含之前示例,并且会持续更新,欢迎大家Star。

如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

Nancy 学习-身份认证(Forms authentication) 继续跨平台的更多相关文章

  1. Nancy 学习-身份认证(Basic Authentication) 继续跨平台

    开源 示例代码:https://github.com/linezero/NancyDemo 前面讲解Nancy的进阶部分,现在来学习Nancy 的身份认证. 本篇主要讲解Basic Authentic ...

  2. 【Shiro】Apache Shiro架构之身份认证(Authentication)

    Shiro系列文章: [Shiro]Apache Shiro架构之权限认证(Authorization) [Shiro]Apache Shiro架构之集成web [Shiro]Apache Shiro ...

  3. 理解ASP.NET Core - 基于Cookie的身份认证(Authentication)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 概述 通常,身份认证(Authentication)和授权(Authorization)都会放 ...

  4. 认识ASP.NET Windows身份认证

    本文摘自:细说ASP.NET Windows身份认证 Forms身份认证虽然使用广泛,不过,如果是在 Windows Active Directory 的环境中使用ASP.NET, 那么使用Windo ...

  5. Wifi 开放系统认证和共享密钥身份认证

    记录开放系统认证和共享密钥认证的区别. 开放系统身份认证(open-systern authentication) 是802.11 要求必备的惟一方式. 由行动式工作站所发出的第一个帧被归类为auth ...

  6. 构建基于分布式SOA架构的统一身份认证体系

    摘要:本文充分利用SOA架构松耦合的特点,通过规范统一网络接口实现业务系统整合,既提升系统安全性,又简化资源访问操作,具有重要的理论和现实意义. 统一身份认证旨在将分散在各个信息系统中的用户和权限资源 ...

  7. Shiro官方快速入门10min例子源码解析框架3-Authentication(身份认证)

    在作完预备的初始化和session测试后,到了作为一个权鉴别框架的核心功能部分,确认你是谁--身份认证(Authentication). 通过提交给shiro身份信息来验证是否与储存的安全信息数据是否 ...

  8. 接口测试 requests的身份认证方式

    requests提供多种身份认证方式,包括基本身份认证.netrc 认证.摘要式身份认证.OAuth 1 认证.OAuth 2 与 OpenID 连接认证.自定义认证.这些认证方式的应用场景是什么呢? ...

  9. 权限管理学习 一、ASP.NET Forms身份认证

    说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单实现登录.注销 以前在学习.net的时候不知道什么Forms ...

随机推荐

  1. video.js html5 视频播放器

    我个人感觉很不错 https://github.com/videojs/video.js <head> <title>Video.js | HTML5 Video Player ...

  2. 302 Moved Temporarily

    这个就是表示 重定向!! 不过,302在不同HTTP协议下的状态信息不同. Moved temporarily (redirect) 你所连接的页面进行了Redirect Found 类似于301,但 ...

  3. show一下自己的文档编写功底

    以我为例,我绝对相信,“才华”和颜值成反比.这里我要秀一下我的文档编写能力.在我这十年的工作生涯里,的确有数不清的次数,我的同事或上司,对我设计和制作的文档表示称赞. 我曾记得,2010年我在好丽友— ...

  4. 将不确定变成确定~Uri文本文件不用浏览器自动打开,而是下载到本地

    回到目录 这个标题有点长,简单来说就是,对于一个文件下载来说,是否可以提示用户,让它去保存,而不是将它在浏览器中打开,在浏览器中打开有个致命问题,那就是,如果你的页面编码和文件的编码不一致时,打开的就 ...

  5. MSSQL Server数据库的四种连接方法和sql连接字符串

    MSSQL Server数据库的四种连接方法和sql连接字符串 分类: [ 03 ] C#(131) [ 07 ] SQL Server(68) [ 01 ] .NET(189) 今天用SQL Ser ...

  6. VMware Workstation cannot connect to the virtual machine 解决方案

    今天 打开虚拟机 忽然遇到这个问题: VMware Workstation cannot connect to the virtual machine. Make sure you have righ ...

  7. 对于System.Net.Http的学习(二)——使用 HttpClient 进行连接

    对于System.Net.Http的学习(一)——System.Net.Http 简介  使用 HttpClient 进行连接 使用 System.Net.Http 命名空间中的 HttpClient ...

  8. 关于js中sort()排序方法

    第一次写这个,算是记录自己的学习前端的一点点的历程吧.今天在做一个图片的随机排序遇到了一个问题,部分截图如下 我用的是json格式存储数组,想通过排序实现img数组中的内容升序或是降序发现用sort自 ...

  9. 关于OpenVPN的入门使用

    关于OpenVPN的入门使用 1.1源代码编译安装的初步了解 1.2 安装OpenVPN 1.3 生成证书.服务器端证书.客户端证书 1.4 关于server.ovpm & client.ov ...

  10. 设置Form窗体中的控件的属性

    借助于反射,可获取当前窗体中的所有控件,根据需要设置它们的属性. Font defaultFont = new System.Drawing.Font("Microsoft Sans Ser ...