我目前正在尝试为我的node.js应用程序设置一个基本的身份validation系统。 现在我使用Express(3.0.0rc5),护照(0.1.12)和socket.io(0.9.10)作为会话数据的Mongoose Store。 我也一直在玩everyauth但我不喜欢与诺言合作。 现在的情况: 通过护照(脸书策略)身份validation是成功的,在redirect后,客户端上设置session.sid cookie,我能看到我的数据库中的会话文档。 我可以通过socket.handshake.headers.cookie访问socket.io的会话cookie。 如果我正确理解了护照概念,那么在成功authentication passport.serializeUser后,我就可以将信息添加到会话中。 在我的情况下,最重要的信息是电子邮件,所以我按照以下方式设置序列化程序: passport.serializeUser(function(user, done) { done(null, user.email); }); 现在我处于必须只使用我的socket.io事件中的cookie信息从会话中提取电子邮件地址的地步。 var connect = require('connect'), parseSignedCookie = connect.utils.parseSignedCookie, cookie = require('express/node_modules/cookie'); io.on('connection', function(socket) { if(socket.handshake.headers.cookie) { var cookie = cookie.parse(socket.handshake.headers.cookie); var sessionID = parseSignedCookie(cookie['connect.sid'], 'secret'); } }); passport.deserializeUser(function(id, done) { // so, what is supposed to be done […]
我的问题与此类似,但对他的解决scheme没有深入的了解。 我正在使用Passport来validation使用Instagram。 成功validation后,用户被定向到“/”。 在这一点上,请求有用户对象(即它正在工作)。 但是,一旦我redirect,req.user是未定义的。 :'( 奇怪的是passport.deserializeUser正在被每个请求调用。 它成功地获取用户对象,但是在中间件的道路上,req.user没有被设置(或未被设置)。 // on successful auth, goto "/" app.get('/', function(req, res) { // if the request has the user object, go to the user page if (req.user) { res.redirect("/user/" + req.user._id); } res.render("index"); } app.get('/user/:uid', function(req, res) { console.log(req.user) // undefined }
我试图用React Native应用程序和一个单独的NodeJS / Express API后端包围oauth。 我明白https://github.com/adamjmcgrath/react-native-simple-auth为React Native应用程序提供身份validation, http ://passportjs.org/为NodeJS后端提供身份validation。 我不确定如何连接这两个身份validationlogin和访问该API。 我希望用户通过电子邮件和密码或通过Facebook / Twitter / Googlelogin到React Native应用程序。 一旦login到应用程序,我应该向API发送什么信息以确保它们已通过身份validation并可以访问特定路线? 以下是一个login并查看login用户设置的示例stream程: 用户通过电子邮件/密码或Facebook / Twitter / Googlelogin到React Native应用程序。 用户通过身份validation 应用程序请求GET / API /设置 APIvalidation用户是否已通过身份validation并返回该用户的设置或APIvalidation用户未通过身份validation,并返回403。
我一直在寻找一段时间,看不到一个明确的文件来源。 当我search这些,谷歌的第一个结果是StackOverflow。 还有更多的中间件function类似吗?
我无法让我的系统使用PassportJS注销。 似乎注销路由正在被调用,但它不会删除会话。 我想要它返回401,如果用户没有login在特定的路线。 我调用authenticateUser来检查用户是否login。 非常感谢! /******* This in index.js *********/ // setup passport for username & passport authentication adminToolsSetup.setup(passport); // admin tool login/logout logic app.post("/adminTool/login", passport.authenticate('local', { successRedirect: '/adminTool/index.html', failureRedirect: '/', failureFlash: false }) ); app.get('/adminTool/logout', adminToolsSetup.authenticateUser, function(req, res){ console.log("logging out"); console.log(res.user); req.logout(); res.redirect('/'); }); // ******* This is in adminToolSetup ******** // Setting up […]
我已经看过error handling如何通过这个堆栈交换在节点中工作,但是我不确定什么护照在authentication失败时正在做什么。 我有以下LocalStrategy: passport.use(new LocalStrategy({ usernameField: 'email', passwordField: 'password' }, function(email, password, next) { User.find({email: UemOrUnm}, function(err, user){ if (err) { console.log('Error > some err'); return next(err); } if (!user) { console.log('Error > no user'); return next('Incorrect login or password'); } if (password != user.password) { return next(Incorrect login or password); } return next(null, user); […]
我使用Passport.js进行身份validation(本地策略),并使用Mocha和Supertest进行testing。 我如何创build一个会话,并使用Supertest进行身份validation请求?
我正在使用本教程构build一个使用Passport.js的身份validation系统。 我对passport.session()做了什么感到困惑。 玩过不同的中间件之后,我明白了express.session()是通过cookie向客户端发送会话ID的,但是我对passport.session()做了什么以及为什么需要除了express.session()。 以下是我如何设置我的应用程序: // Server.jsconfiguration应用程序并设置Web服务器 //importing our modules var express = require('express'); var app = express(); var port = process.env.PORT || 8080; var mongoose = require('mongoose'); var passport = require('passport'); var flash = require('connect-flash'); var configDB = require('./config/database.js'); //Configuration of Databse and App mongoose.connect(configDB.url); //connect to our database require('./config/passport')(passport); //pass passport for configuration app.configure(function() […]
我正在使用express + mongoose的节点,并尝试使用passport.js和restful api。 validation成功后,我一直收到这个exception(我在浏览器上看到了callbackurl): /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/utils.js:419 throw err; ^ Error: passport.initialize() middleware not in use at IncomingMessage.req.login.req.logIn (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/http/request.js:30:30) at Context.module.exports.delegate.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/middleware/authenticate.js:194:13) at Context.actions.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/context/http/actions.js:21:25) at verified (/Users/naorye/dev/naorye/myproj/node_modules/passport-facebook/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:133:18) at Promise.module.exports.passport.use.GitHubStrategy.clientID (/Users/naorye/dev/naorye/myproj/config/passport.js:91:24) at Promise.onResolve (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8) at Promise.EventEmitter.emit (events.js:96:17) at Promise.emit (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38) at Promise.fulfill (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20) at /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/query.js:1822:13 我读过,我应该把app.use(passport.initialize()); 和app.use(passport.session()); 在app.use(app.router);之前app.use(app.router); 这就是我所做的。 这是我的express.js注册中间件: var express = require('express'), mongoStore = […]
我试图build立一个使用node.js,express和passport.js的login机制。 login本身工作得相当不错,会话也很好地存储在redis中,但是在提示用户进行身份validation之前,将用户redirect到他所在的位置时遇到了一些麻烦。 例如,用户链接http://localhost:3000/hidden然后被redirect到http://localhost:3000/login但是我希望他再次被redirect到http://localhost:3000/hidden 。 这样做的目的是,如果用户随机访问一个页面,他需要首先login,他应该被redirect到/ login站点提供他的凭据,然后被redirect到他以前试图访问的网站。 这是我的login信息 app.post('/login', function (req, res, next) { passport.authenticate('local', function (err, user, info) { if (err) { return next(err) } else if (!user) { console.log('message: ' + info.message); return res.redirect('/login') } else { req.logIn(user, function (err) { if (err) { return next(err); } return next(); // <-? Is this line […]