NancyFx 2.0的开源框架的使用-Stateless(二)
继续上一篇Stateless的博文,在上一篇的博文的基础上稍微加点东西

接下来右键解决方案添加新项目,一样建一个空的Web项目



然后在StatelessDemoWeb项目里面添加Views文件夹,Scripts文件夹,并在Views文件夹里面添加index,login,secure三个页面

在index页面添加如下代码
<body>
<div id="loggedIn" style="display:none;"><p>欢迎<span id="username">.</span><a href="#" id="logout">登出</a></p></div>
<h1>非安全页面</h1>
<p><a href="secure.html">安全页面</a></p>
<script type="text/javascript">
$(document).ready(function () {
var apiToken = ApiToken.Get();
if (apiToken.IsValid) {
$("#loggedIn").show();
$("#username").html(apiToken.Username);
$("#logout").click(function () {
var request = { apiKey: apiToken.Key };
var success = function () {
ApiToken.Delete();
window.location = "index.html";
};
$.ajax({
type: 'DELETE',
url: api.auth,
data: request,
success: sucess,
dataType: "json"
});
});
}
});
</script>
</body>

在login页面添加如下代码
<body>
<div>
<input type="text" id="Username" placeholder="登陆名"/><br />
<input type="password" id="Password" placeholder="密码"/><br />
<input id="RememberMe" type="checkbox" value="True"/><br />
<button id="submitButton">登陆</button>
</div>
<div id="errorBox" style="display:none">
无效的用户名和密码
<script type="text/javascript">
$(document).ready(function () {
$("#submitButton").click(function () {
$("#errorBox").hide();
var authRequest = {
username: $("#Username").val(),
password: $("#Password").val(),
rememberMe: $("RememberMe").val()
};
var success = function (response) {
ApiToken.Set(authRequest.username, response.ApiKey, authRequest.rememberMe);
window.location = "index.html";
};
var error = function () {
$("#errorBox").show();
};
$.ajax({
type: 'POST',
url: api.auth,
data: authRequest,
success: success,
error: error,
dataType: "json"
});
});
});
</script>
</div>
</body>

在secure页面添加如下代码
<body style="display:none">
<div>
<a href="index.html"><<主页</a>
<div id="loggedIn" style="display:none">
<p>欢迎<span id="username"></span>.<a href="#" id="logout">登出</a></p>
</div>
<h1>安全页面</h1>
<div>安全内容:<span id="secureContent" class="secure"></span></div>
<div>
<input type="text" id="newusername" placeholder="用户名"/><br />
<input id="newpassword" type="password" placeholder="密码"/><br />
<input type="button" onclick="createUser()"/>
<div id="createuserresult"></div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function () {
//如果 apiKey 存在, 则表示用户已登录
//检查 apiKey 是否存在
var apiToken = ApiToken.Get();
if (apiToken.IsValid) {
//用户已登录
//获取和显示安全内容
//使用我们存储在 cookie 中的 apiKey
var request = { apiKey: apiToken.Key };
//成功视图
var success = function (response) {
$("#username").html(apiToken.Username);
$("#secureContent").html(response.SecureContent);
$("body").show();
};
//将用户重定向到401上的登录页
var error = function (response) {
if (response.status == ) {
window.location = "login.html";
return;
}
alert("出问题了" + response.error);
};
$.ajax({
url: api.secure,
data: request,
success: success,
error: error,
dataType:"json"
});
}
else {
//如果没有保存 apiToken, 则表示用户尚未登录
//将 "em 打包" 发送到登录页
window.location = "login.html";
}
if (apiToken.IsValid) {
$("#loggedIn").show();
$("#username").html(apiToken.Username);
$("#logout").click(function () {
//将 apiKey 发送到要销毁的 api
var request = { apiKey: apiToken.Key };
//当契约在服务器上完成时,
//删除客户端中的 cookie, 然后重定向到主页。
var success = function () {
apiToken.Delete();
window.location = "index.html";
};
$.ajax({
type: 'DELETE',
url: api.auth,
data: resquest,
dataType: "json"
});
});
}
});
function createUser() {
var apiToken = ApiToken.Get();
if (apiToken.IsValid) {
//用户已登录
var request = {
username: $("#newusername").val(),
password: $("#newpassword").val()
};
//成功视图
var success = function (response) {
$("#createuserresult").html("用户" + response.username + "已创建");
};
//将用户重定向到401上的登录页
var error = function (response) {
if (response.status == ) {
window.location = "login.html";
return;
}
alert("出问题了" + response.error);
};
$.ajax({
type: "POST",
url: api.create_user + "?ApiKey=" + apiToken.Key,
data: request,
success: success,
error: error,
dataType:"json"
});
}
else {
//如果没有保存 apiToken, 则表示用户尚未登录
//将 "em 打包" 发送到登录页
window.location = "login.html";
}
}
</script>
</body>

然后在script文件夹添加api.js,apiToken.js两个文件,然后修改api.js文件如下
var api = {
auth: "http://localhost:9611/restApi/auth",
secure: "http://localhost:9611/restApi/secure",
create_user:"http://localhost:9611/resApi/secure/create_user"
};

apiToken.js文件添加如下代码
var apiKeyKey = "sample_apiKey";
var usernameKey = "sample_username"; var ApiToken = {
Set: function (username, apiKey, rememberMe) {
var days = rememberMe ? : ;
createCookie(apiKeyKey, apiKey, days);
createCookie(usernameKey,username,days);
},
Get: function ()
{
var key = readCookie(apiKeyKey);
var username = readCookie(usernameKey);
var token = { Key: key, Username: username, IsValid: key != null };
return token;
},
Delete: function ()
{
eraseCookie(apiKeyKey);
eraseCookie(usernameKey);
}
};
function createCookie(name,value,days)
{
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * * * ));
var expires = ";expires=" + date.toGMTString();
} else {
var expires = "";
document.cookie = name + "=" + value + expires + ";path=/";
console.log(document.cookie);
}
}
function readCookie(name) {
var cookieValue = null;
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = ; i < ca.length; i++) {
var c = cap[i];
while (c.charAt() == ' ') {
c = c.substring(, c.length);
}
if (c.indexOf(nameEQ) == ) {
var found = c.substring(nameEQ.length, c.length);
cookieValue = found;
}
}
return cookieValue;
}
function eraseCookie(name) {
createCookie(name,"",-);
}

运行如下

谢谢观赏
NancyFx 2.0的开源框架的使用-Stateless(二)的更多相关文章
- NancyFx 2.0的开源框架的使用-Stateless
同样和前面一样新建一个空的Web项目,都在根目录添加Module,Models,Views文件夹 添加Nuget包 在Models文件夹里面添加UserModel类 public string Use ...
- NancyFx 2.0的开源框架的使用-Basic
这是NancyFx开源框架中的Basic认证,学习一下! 首先当然是新建一个空的Web,BasicDemo 继续在项目中添加Nuget包,记得安装的Nuget包是最新的预发行版 Nancy Nancy ...
- NancyFx 2.0的开源框架的使用-CustomModule(自定义模块)
NancyFx框架的自定义模块 新建一个空的Web项目 然后通过NuGet库安装下面的包 Nancy Nancy.Hosting.Aspnet 然后添加Models,Module,Views三个文件夹 ...
- NancyFx 2.0的开源框架的使用-ModelBinding(实现绑定)
NancyFx框架中使用绑定模型 新建一个空的Web程序 然后安装Nuget库里面的包 Nancy Nancy.Hosting.Aspnet Nancy.ViewEnglines.Spark 并在We ...
- NancyFx 2.0的开源框架的使用-HosingOwin
Nancy框架的Owin使用 先建一个空的Web项目 然后往Nuget库里面添加Nancy包 Nancy Nancy.Owin Nancy.ViewEnglines.Spark 然后添加Models, ...
- NancyFx 2.0的开源框架的使用-Authentication
新建一个空的项目 新建好了空的项目以后,接着通过NuGet安装一下三个包 Nancy Nancy.Hosting.Aspnet Nancy.ViewEnglines.Razor 然后在项目中添加Mod ...
- NancyFx 2.0的开源框架的使用-Forms
同样的像前面2篇博文一样,每个项目的开始基本都是建个空的Web项目 在NuGet库中安装以下几个NuGet包 Nancy Nancy.Authentication.Forms Nancy.Hostin ...
- NancyFx 2.0的开源框架的使用-AspnetBootstrapping
新建一个空的Web项目AspnetBootstrappingDemo 然后添加NuGet组件 Nancy Nancy.Hosting.Aspnet Nancy.ViewEngines.Razor 继续 ...
- NancyFx 2.0的开源框架的使用-Caching
新建一个空的Web项目,命名CachingDemo 然后添加三个Nuget安装包 Nancy Nancy.Hosting.Aspnet Nancy.ViewsEngines.Razor 然后往项目里面 ...
随机推荐
- javaweb浏览器随机输出一张验证码图片
一.在web.xml中的配置如下: <?xml version="1.0" encoding="UTF-8"?><web-app xmlns: ...
- ng自定义一个过滤器
ng允许我们自定义指令 下面来我们自己来定义一个过滤指令:filter,返回一个函数的形式 filter(name,callback(){//name:过滤器的名字,callback:匿名函数 ret ...
- Access SQL实现连续及不连续Rank排名
一.关于起因 在Excel中我们经常使用Rank函数对数据进行排名操作.而在Access中我们要进行排名是找不到这个Rank函数的,此时我们需要自己书写VBA代码或者建立SQL查询来完成排序操作. 今 ...
- 4.熟悉Java基本类库系列——Java 正则表达式类库
正则表达式语法结构图: Java正则表达式类库结构图: Java典型例子 1.String类 matches()方法 判断字符串是否符合特定正则表达式 @Test public void testRe ...
- sqoop 操作从hdfs 导入到mysql中语句
将hdfs下/dw/dms/usr_trgt下的文件导入到mysql中test数据库下usr_trgt表中 sqoop-export --connect jdbc:mysql://mysqlDB: ...
- Android下使用busybox的ifconfig
busybox ifconfig eth0 10.0.16.45 netmask 255.255.254.0 broadcast 10.0.16.186busybox route add defaul ...
- user-modify属性,让html标签可以编辑
其实这只是一个很小的需求,但是写着写着发现干货越来越多,所以特意给大家分享一下. 项目需要做一个类似QQ聊天输入的效果 有的同学说,这不是很简单吗?一开始我也这么感觉 :) 观察需求 1.整体固定在底 ...
- ViewPager—01引导页的制作
布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...
- SQL使用视图的优缺点
视图是为了查询方便!也就是多个表的总结!但是不能对视图增删改! 在做数据库开发中使用视图的优点有: 1.视图的好处就是在你做复杂的查询逻辑时可以简化你的思考过程. 2.用视图可以隐藏一定的信息,用过滤 ...
- stm32串口通讯问题
stm32串口通讯问题 在串口试验中,串口通讯不正常,则可能会出现以下问题: 1. 配置完成后,串口没有任何消息打印. 原因:1,端口配置有问题,需要重新检查I/O口的配置 2,接线有问题,检查接线是 ...