Nancy 学习-身份认证(Forms authentication) 继续跨平台
开源 示例代码:https://github.com/linezero/NancyDemo
上篇讲解Nancy的Basic Authentication,现在来学习Nancy 的Forms身份认证。
本篇主要讲解Forms authentication ,Forms身份认证。
说明:本篇示例是基于 Nancy 1.4.3。Nancy 2.0预览版 已经发布,版本改动较大,故特此说明。
准备
安装 Nancy.Authentication.Forms
- Install-Package Nancy.Authentication.Forms -Version 1.4.1
实战
继续在示例中添加代码,没有新建项目。
1.实现 IUserMapper 接口
新建一个 FormsUserMapper 类实现接口 IUserMapper
- public class FormsUserMapper : IUserMapper
- {
- private static List<Tuple<string, string, Guid>> users = new List<Tuple<string, string, Guid>>();
- public FormsUserMapper()
- {
- users.Add(new Tuple<string, string, Guid>("linezero", "demo", new Guid("19FF111D-DCF5-4FFC-9CFA-4C256E7C9748")));
- users.Add(new Tuple<string, string, Guid>("nancy", "demo", new Guid("18FF111D-DCF5-4FFC-9CFA-4C256E7C9748")));
- }
- public IUserIdentity GetUserFromIdentifier(Guid identifier, NancyContext context)
- {
- var userRecord = users.Where(u => u.Item3 == identifier).FirstOrDefault();
- return userRecord == null
- ? null
- : new FormsUser { UserName = userRecord.Item1 };
- }
- public static Guid? ValidateUser(string username, string password)
- {
- var userRecord = users.Where(u => u.Item1 == username && u.Item2 == password).FirstOrDefault();
- if (userRecord == null)
- {
- return null;
- }
- return userRecord.Item3;
- }
- }
这里我简单的写了个多个用户,而不是之前的单个用户。
Nancy身份认证都涉及到IUserIdentity 接口,这里我为了区分之前的Basic 认证,新建了一个FormsUser 类实现IUserIdentity。
2.添加登录登出
添加一个module ,来实现登录登出。
新建FormsModule 类,并建立对应文件夹。
新建一个登录页:
- <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="utf-8" />
- <title>登录</title>
- </head>
- <body>
- <form method="post">
- Username
- <input type="text" name="Username" />
- <br />
- Password
- <input name="Password" type="password" />
- <br />
- Remember Me
- <input name="RememberMe" type="checkbox" value="True" />
- <br />
- <input type="submit" value="Login" />
- </form>
- @if (Model.Errored)
- {
- <div id="errorBox" class="floatingError">用户名或密码错误</div>
- }
- </body>
- </html>
接受登录信息:
- Post["/login"] = r =>
- {
- var userGuid = FormsUserMapper.ValidateUser((string)this.Request.Form.Username, (string)this.Request.Form.Password);
- if (userGuid == null)
- {
- return this.Context.GetRedirect("~/forms/login?error=true&username=" + (string)this.Request.Form.Username);
- }
- DateTime? expiry = null;
- if (this.Request.Form.RememberMe.HasValue)
- {
- expiry = DateTime.Now.AddDays();
- }
- return this.Login(userGuid.Value, expiry);
- };
更多详细代码,请看示例代码。
3.配置启用Forms身份认证
在Bootstrapper 的ApplicationStartup 添加如下代码:
- container.Register<IUserMapper, FormsUserMapper>();//Forms 认证
- var formsAuthConfiguration = new FormsAuthenticationConfiguration()
- {
- RedirectUrl = "~/forms/login",
- UserMapper = container.Resolve<IUserMapper>(),
- };
- FormsAuthentication.Enable(pipelines, formsAuthConfiguration);//启用Forms 认证
在需要授权的Module 加上就可以开启。
- this.RequiresAuthentication();
由于示例代码存在Basic 认证,我将其注释了。只保留Forms。
4.实现效果
访问: http://localhost:9000/
成功登录后 访问:http://localhost:9000/forms/
示例代码下载:https://github.com/linezero/NancyDemo
示例代码包含之前示例,并且会持续更新,欢迎大家Star。
如果你觉得本文对你有帮助,请点击“推荐”,谢谢。
Nancy 学习-身份认证(Forms authentication) 继续跨平台的更多相关文章
- Nancy 学习-身份认证(Basic Authentication) 继续跨平台
开源 示例代码:https://github.com/linezero/NancyDemo 前面讲解Nancy的进阶部分,现在来学习Nancy 的身份认证. 本篇主要讲解Basic Authentic ...
- 【Shiro】Apache Shiro架构之身份认证(Authentication)
Shiro系列文章: [Shiro]Apache Shiro架构之权限认证(Authorization) [Shiro]Apache Shiro架构之集成web [Shiro]Apache Shiro ...
- 理解ASP.NET Core - 基于Cookie的身份认证(Authentication)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 概述 通常,身份认证(Authentication)和授权(Authorization)都会放 ...
- 认识ASP.NET Windows身份认证
本文摘自:细说ASP.NET Windows身份认证 Forms身份认证虽然使用广泛,不过,如果是在 Windows Active Directory 的环境中使用ASP.NET, 那么使用Windo ...
- Wifi 开放系统认证和共享密钥身份认证
记录开放系统认证和共享密钥认证的区别. 开放系统身份认证(open-systern authentication) 是802.11 要求必备的惟一方式. 由行动式工作站所发出的第一个帧被归类为auth ...
- 构建基于分布式SOA架构的统一身份认证体系
摘要:本文充分利用SOA架构松耦合的特点,通过规范统一网络接口实现业务系统整合,既提升系统安全性,又简化资源访问操作,具有重要的理论和现实意义. 统一身份认证旨在将分散在各个信息系统中的用户和权限资源 ...
- Shiro官方快速入门10min例子源码解析框架3-Authentication(身份认证)
在作完预备的初始化和session测试后,到了作为一个权鉴别框架的核心功能部分,确认你是谁--身份认证(Authentication). 通过提交给shiro身份信息来验证是否与储存的安全信息数据是否 ...
- 接口测试 requests的身份认证方式
requests提供多种身份认证方式,包括基本身份认证.netrc 认证.摘要式身份认证.OAuth 1 认证.OAuth 2 与 OpenID 连接认证.自定义认证.这些认证方式的应用场景是什么呢? ...
- 权限管理学习 一、ASP.NET Forms身份认证
说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单实现登录.注销 以前在学习.net的时候不知道什么Forms ...
随机推荐
- 3、CC2541芯片中级教程-OSAL操作系统(ADC光敏电阻和修改串口波特率)
本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...
- Android自定义View的构造函数
自定义View是Android中一个常见的需求,每个自定义的View都需要实现三个基本的构造函数,而这三个构造函数又有两种常见的写法. 第一种 每个构造函数分别调用基类的构造函数,再调用一个公共的初始 ...
- C#基础入门一
.net(软件开发平台)-------------------------------------------------------- 学习内容:.net平台下的开发语言. .net freamwo ...
- Javascript中构造函数与new命令2
典型的面向对象编程语言(比如C++和Java),存在"类"(class)这个概念.所谓"类"就是对象的模板,对象就是"类"的实例.但是,在J ...
- [Java集合] 彻底搞懂HashMap,HashTable,ConcurrentHashMap之关联.
注: 今天看到的一篇讲hashMap,hashTable,concurrentHashMap很透彻的一篇文章, 感谢原作者的分享. 原文地址: http://blog.csdn.net/zhanger ...
- Atitit 发帖机实现(1)-----UsrQBm2008 页面上下文规范
Atitit 发帖机实现(1)-----UsrQBm2008 页面上下文规范 1.1. 网站绝对路径,页面绝对路径1 1.2. Java的javax.servlet.ServletContext1 ...
- CKEditor与CKFinder整合 MVC3
今天偶然看到一篇关于 CKEditor与CKFinder整合文章,心想有一段时间没有使用这种东西了.于是乎自己动手亲自体验了一下,本以为简单但在东西编写的过程发现了很多没有遇见毛病. 所以记录一下自己 ...
- KnockoutJS 3.X API 第四章 表单绑定(11) options绑定
目的 options绑定主要用于下拉列表中(即<select>元素)或多选列表(例如,<select size='6'>).此绑定不能与除<select>元素之外的 ...
- HTML网页内容转换成字符串(删除从指定字符串到指定字符串)
背景: 最近遇到个小需求就是将下面字符串去掉无用字符串 <br><br>"你爷爷也喜欢吃鱼嘛."<br><br>我笑了起来,&quo ...
- Linux下如何删除Oracle
一. 停止Oracle数据库服务 shutdown immediate 二. 停止监听服务 lsnrctl stop 三. 用dbca卸载数据库实例 四. 删除相关文件 -->> 如果只 ...