二:实现登录认证

  passport官网文档:  http://passportjs.org/guide/

  passport验证使用一种被称为“策略”的方式来验证请求,策略支持3种类型的验证:用户名密码验证;OAuth委派验证,OpenID等联合身份验证(facebook,twitter等)。

  联合身份认证可参考这里

  常用的是LocalStrategy策略来为用户名密码验证,它通过use()函数来调用。

使用步骤:

1:安装模块,passport 和 passport-local

2:添加引用

  passport = require 'passport'
  LocalStrategy = require('passport-local').Strategy

 引用中间件app.use:

  passport.initialize()中间件是初始化passport必须的。

  passport.session()如果应用程序使用永久登录会话,该中间件也必须使用。

注:该中间件的引用一定要写在app.router之前。原因上一节以说明。

3:配置local-strategy,本地策略

passport.use(new LocalStrategy((username,password,done) ->
User.find {userName:username,password:password},(err, docs) ->
return done err if err?
return done null,false,{message:"用户名或者密码错误"} if docs.length is
done null,docs[]))
当用户验证请求发出后,他会解析请求参数username,password(默认参数),也可以自定义名字,验证完后出发done函数。
done(err):err参数表示在验证过程中出现了异常,如数据库连接问题。
done(null,false):如果凭证无效(例如,如果密码是不正确的)done的第二个参数返回false,表示认证失败。
done(null,false,{msg:'err info'})  认证失败后的失败信息,可通过req.flash访问到
done(null,user)  认证成功并返回user对象
 
自定义的认证字段,用usernameField,passwordField, 对应页面上的input,name属性为email,passwd
new LocalStrategy({ usernameField: 'email', passwordField: 'passwd' },(username,password,done) -> ...)
4:当验证成功,建立会话,并通过cookie维持。passport需要序列化和反序列化的用户实例来支持会话。因此,serializeUser和deserializeUser回调也是必需的。
passport.serializeUser (user, done) ->
done null, user passport.deserializeUser (user, done) ->
done null, user

5: 调用

在用户发出登录请求时触发验证

app.post('/login',
passport.authenticate('local',
{
failureRedirect: '/login',
failureFlash:true

}
),

(req,res) ->
if req.user.role is 'normal' #角色1
res.redirect '/MB/index'
else if req.user.role is 'auditor' #角色2
res.redirect '/audit'
else if req.user.role is 'admin' #管理员
res.redirect '/BM/index'
)

若不分角色 可直接

app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));

6:页面错误信息参数

app.get '/login',(req, res) ->
res.render 'login', layout:false, error:req.flash('error')

7:登出

app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});

express+nodecoffee写passport登录验证实例(二)的更多相关文章

  1. express+nodecoffee写passport登录验证实例(一)

    项目中要用到passport登录验证,环境如标题样:express框架,coffee模版引擎,node后台 一:建项目 直接用express命令建,虽然默认模版为jade,可以手动换成coffee哦. ...

  2. Shiro安全框架入门篇(登录验证实例详解与源码)

    转载自http://blog.csdn.net/u013142781 一.Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和J ...

  3. passport登录问题:passport.use 方法没有被调用

    写passport登录验证时,无论如何passport.use 方法都没有被调用,最后在同事的帮助下,才找到问题: 我是用form提交登陆数据的, input type:"text" ...

  4. C# mvc中为Controller或Action添加定制特性实现登录验证

    在本文开始前,先简单讲两个知识点: 1.每个action执行前都会先执行OnActionExecuting方法: 2.FCL提供了多种方式来检测特性的存在,比如IsDefined.GetCustomA ...

  5. Asp.NetMVC利用LigerUI搭建一个简单的后台管理详解(函登录验证)

    上一篇 Asp.Net 中Grid详解两种方法使用LigerUI加载数据库数据填充数据分页  了解了LigerUI 中Grid的基本用法  现在结合上一篇的内容做一个简单的后台管理,当然也有前台的页面 ...

  6. nodeJS---express4+passport实现用户注册登录验证

    网上有很多关于passport模块使用方法的介绍,不过基本上都是基于express3的,本文介绍在express4框架中使用passport模块. 前言 passport是一个功能单一,但非常强大的一 ...

  7. Express + Session 实现登录验证

    1. 写在前面 当我们登录了一个网站,在没有退出登录的情况下,我们关闭了这个网站 ,过一段时间,再次打开这个网站,依然还会是登录状态.这是因为,当我们登录了一个网站,服务器会保存我们的登录状态,直到我 ...

  8. 搭建开发框架Express,实现Web网站登录验证

    NodeJS学习笔记(一)——搭建开发框架Express,实现Web网站登录验证   JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需 ...

  9. 网站注册与登录使用 bcrypt与 passport 双重验证 解释

    网站在登录前,需要进行注册收集用户基本信息,bcrypt 提供密码加密验证的方法,但是使用不正确,会给初学者带来各种问题. bcrypt 的安装: npm i bcrypt 经过测试,经常安装不成功, ...

随机推荐

  1. C#登录窗口及验证(+SQL)

    团队成员及分工 团队: Blue 团队共有六人 姓名:     学号后四位:       贡献分: 张   宇(队长)  1152          1+1.7=2.7分 丁志愿          1 ...

  2. [C和指针]第五部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. JS——ajax login test

    1.新建一个webproject,我用的是myeclipse10,建立如下的LoginServlet.java文件 2.编写java文件 import java.io.IOException; imp ...

  4. python_way day6 反射,正则 模块(进度条,hash)

    python_way day6 反射 正则 模块 sys,os,hashlib 一.模块: 1.sys & os: 我们在写项目的时候,经常遇到模块互相调用的情况,但是在不同的模块下我们通过什 ...

  5. Python基础学习笔记(二)变量类型

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-chinese-encoding.html 3. http://w ...

  6. XAF应用开发教程(六)控制器

    是的,XAF也是MVC结构的,但不仅限于MVC,ViewModel也存在,它是一项复合技术,AOP,ORM,MVC都有. 真实运行的系统中,仅有增删改查功能肯定是远远不够的,ERP.CRM等系统的开发 ...

  7. Redis实践操作之—— keyspace notification(键空间通知)

    一.需求分析: 设置了生存时间的Key,在过期时能不能有所提示? 如果能对过期Key有个监听,如何对过期Key进行一个回调处理? 如何使用 Redis 来实现定时任务? 二.序言: 本文所说的定时任务 ...

  8. [转载] 分析Linux内核创建一个新进程的过程

    http://blog.luoyuanhang.com/2015/07/27/%E5%88%86%E6%9E%90Linux%E5%86%85%E6%A0%B8%E5%88%9B%E5%BB%BA%E ...

  9. Mono for Android布局控件属性小结

    1. layout_weight 用于给一个线性布局中的诸多视图的重要度赋值. 所有的视图都有一个layout_weight值,默认为零,意思是需要显示 多大的视图就占据多大的屏幕空 间.若赋一个高于 ...

  10. 第一天……

    Hello,大家好! 不对,这个开头有点不对.我不应该这么说,这个博客我是为我自己而开通的.目的很简单,好记兴不如烂笔头,把每天所学所感写下来. 我想作一个有条理的人,一个有计划的人,一个有效率的人. ...