二:实现登录认证

  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. [CVE:2013-4810]Apache Tomcat/JBoss远程命令执行

    <?php $host=gethostbyname($argv[1]); $port=$argv[2]; $cmd=$argv[3]; //small jsp shell //change th ...

  2. Music Player团队项目(一)

    团队成员及分工 团队: Blue 团队共有六人 姓名:     学号后四位:       贡献分: 张   宇(队长)  1152          1+1.8=2.8分 侯贺琦          1 ...

  3. 用@RequestMapping映射请求

    DispatcherServlet接受一个web请求之后,将请求发送给@Controller注解声明的不同控制器类. 这个调度过程依赖控制器类及其处理程序方法中声明的各种@RequestMapping ...

  4. Linux vi 中移动光标 命令

    移动光标 上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行下:j nj:向下移动n行左:h nh:向左移动n列右:l nl:向右移动n列 w:光标以单词向前移动 nw:光标向 ...

  5. c 函数调用产生的汇编指令和数据在内存情况(2)

    c 函数调用产生的汇编指令和数据在内存情况(1) 一直对函数调用的具体汇编指令和各种变量在内存的具体分配,一知半解.各种资料都很详细,但是不实践,不亲自查看下内存总不能笃定.那就自己做下. 两个目的: ...

  6. netty概念

    Netty的ChannelFuture在Netty中的所有的I/O操作都是异步执行的,这就意味着任何一个I/O操作会立刻返回,不保证在调用结束的时候操作会执行完成.因此,会返回一个ChannelFut ...

  7. As Easy As Possible

    题目链接 题意:一个只含e, a, s, y的字符串,问[l, r]内有多少个easy序列? 题解:倍增. #include <bits/stdc++.h> using namespace ...

  8. poj1434Fill the Cisterns!(二分)

    链接 题目说给你n个水箱,初始是没有水的,每个的高低位置可能不同,给了你初始的水箱底部所处的水平线位置,问给你V体积水时,水的水平线位置. 直接二分位置p,对于每一个底部低于水平线位置的水箱,里面的水 ...

  9. 【Todo】【读书笔记】机器学习实战(Python版)

    还是把这本书的读书笔记,单独拎出来吧,因为内容比较多. P38. Logistic 回归. 觉得还蛮实用的.囫囵吞枣看的.要细看.

  10. java中如何把后台数据推送到页面上 【后续编辑】

    https://my.oschina.net/yongqingfan/blog/535749 http://www.blogjava.net/BearRui/archive/2010/05/19/fl ...