开源 示例代码: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) 继续跨平台的更多相关文章

  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. Linux sort命令

    200 ? "200px" : this.width)!important;} --> 介绍 sort命令是一个文本排序命令,它能对标准输入和文本文件进行排序,并且能将结果通 ...

  3. zk系列-zookeeper概述

    接触zk是2年前了,最近工作又比较依赖于zk,所以准备起个系列文章,系统的总结下. zookeeper是一个分布式的用于协调的服务,起源于Hadoop中的一个组件.分布式系统可以用zookeeper实 ...

  4. C++ std::multiset

    std::multiset template < class T, // multiset::key_type/value_type class Compare = less<T>, ...

  5. Oracle常见名词解析

    创建用户 概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用. create user 用户名 identified by 密码; ...

  6. salesforce 零基础学习(三十六)通过Process Builder以及Apex代码实现锁定记录( Lock Record)

    上一篇内容是通过Process Builder和Approval Processes实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes的条件 ...

  7. python学习 变量的操作 与 基本数据类型

    一变量(本文使用python3.5): #变量:是计算机内存中的一块区域,变量可以存储规定范围内的值,变量可以改变#在python中变量是计算机内存中数据的引用 python的变量没有明显的类型,具体 ...

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

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

  9. 冒泡排序java代码

    冒泡排序就是依次取出最大数,然后依次交换放到数组最后边. 直观写法: public long[] sort(long[] a){ int n = a.length - 1; // Step:1 选出最 ...

  10. mysql load data infile的使用 和 SELECT into outfile备份数据库数据

    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE t ...