使用Passport登录会话(Node.js/Express)
Session login with Passport (Node.js/Express)
如何使用Passport (Express)管理会话登录?通过会话登录,我的意思是:经过身份验证的用户不应该在每次请求时都重新发送凭据。
在下面的示例中,即使用户已经通过了身份验证,也会继续调用myStrategy.authenticate()
。
var express = require( "express" );
var session = require( "express-session" );
var passport = require( "passport" );
var app = express();
var myStrategy = function(){ this.name = "mystrategy"; };
myStrategy.prototype.authenticate = function( req ) {
console.log( "called" );
this.success( "user" );
};
passport.use( new myStrategy() );
passport.serializeUser( function( id, cb ){ cb( null, id ); });
passport.deserializeUser( function( id, cb ){ cb( null, id ); });
app
.use( session({ secret: "hello", resave: true, saveUninitialized: true }) )
.use( passport.initialize() )
.use( passport.session() )
.get( "/", passport.authenticate( "mystrategy" ), function( req, res ) {
res.send( "OK" );
})
.listen( 80 );
似乎passport.session()
从req.session.passport.user
检索req.user
,但passport.authenticate()
即使在定义req.user
时也会触发,这破坏了整个要点。
解决方案是将登录操作(在登录页面上)与身份验证检查(在受保护的页面上)分离:
.get( "/auth", passport.authenticate( "mystrategy" ), function( req, res ) {
res.send( "OK" );
})
.get( "/private", function( req, res ) {
if ( req.isAuthenticated() ) {
res.send( "Private data" );
}
})
相关文章:
- '会话'未定义-会话存储的Este JS/Express/Redis
- 节点JS express和控制台输出到命令行与浏览器
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- 使用React.js+Express.js发送电子邮件
- 基本node.js express身份验证不起作用
- node.js express处理其他.get尝试
- 在 Node.js(Express)Facebook 画布应用程序中获取signed_request
- Node.js & Express 不能用简单的 Bootstrap 表单发布/错误
- 节点.js + Express - 在完成之前返回未定义的回调
- Node.JS Express服务器无法从Enide运行
- TypeError:undefined不是node.js/express.js中的函数
- node.js-express.js API删除http后处理程序
- 如何使用Ember Ajax从Node JS Express传入数据
- Node.js/express,javascript回调函数未执行
- 在Heroku Node.js/Express应用程序上禁用HTTPS
- Node.js Express应用程序:如果存在cookie,则从服务器端向元素添加CSS类
- Node.js+Express+socket.io-socket.io服务不正常
- Node.js express应用程序无法从dropzone.js回调进行重定向
- 如何在 A 节点.js/Express 服务器上接收一些文件并将文件发送到 B 节点.js/express 服务器
- Node.js / Express :通过 ajax 下载文件