Articles of passport.js

表示authentication中间件在PUT请求后无法正确redirect

我正在使用下面的中间件passportjs。 假设用户在请求某些事情时是否login。 如果他没有login,他应该被redirect到login页面。 我有一个请求路由如下: app.put('/fantasyteams/:fantasyTeamId', auth.requiresLogin, fantasyteams.update); 当用户尝试更新网站中名为“幻想团队”的资源时,将会调用此路线 auth.requiresLogin是一个中间件,如下所示: exports.requiresLogin = function (req, res, next) { if (req.isAuthenticated()) { return next() } return res.redirect("/signin"); }; login我的用户后,我通过删除会话cookie来模拟会话过期。 此后,我通过网站做了一个PUT'/ fantasyteams / 123'的更新幻想团队号码123。 fantasyteams.update只是一个mongodb / mongoose保存操作: exports.update = function(req, res){ var fantasyteam = req.fantasyteam; fantasyteam = _.extend(fantasyteam, req.body); fantasyteam.save(function(err){ res.jsonp(fantasyteam); }); }; 正如所料,上面的路由处理程序(app.put …)抓住了请求,将它传递给auth.requiresLogin中间件来检查用户是否login。因此,事实certificate,用户没有login,因为我删除他的会话cookie。 按预期调用res.redirect。 但是,该网站不会redirect到login页面。 我在node.js命令日志中看到了这一点: PUT […]

Passport.js表示意见

我正在使用护照和一些静态的.html文件。 我想包括他们作为明确的意见或静态文件。 现在我希望像login.html这样的一些.html文件可供所有人使用,但其他视图文件如secret.html应该需要护照。 我知道,你可以为路由使用app.get('somePath', ensureAuthenticated, function (req, res, next) {} ,但我希望它用于静态文件 。 如何做到这一点不hacky的方式?

检测提供商注销passport.js?

我知道web应用程序通常不会将其会话绑定到其login提供程序的会话,但是我有一个要求,即当用户login其login提供程序时需要检测,以便我们可以从应用程序中签出以及。 我目前在我的Node.js服务器上设置了护照。 login很容易实现,它一直工作正常,但我一直没能find提供者的轮询当前用户会话状态的文档。 护照是否提供检查这种状态的手段? 再次调用authenticate路由总是做一个redirect,所以我正在寻找一个简单和ajax友好的方式来得到是或否的答案的问题:'用户仍然有一个有效的会议在他们的login提供者的结束? 谢谢

Passport.js LocalStrategy逻辑

我想了解LocalStrategy如何工作。 这是我的服务器文件的一部分: var passport = require('passport'); var express = require('express'); /* other initializations */ var app = express(); passport.use = new LocalStrategy( function(email, password, done) { module.exports.findByUsername(email, function(err, user){ if (err) throw err; if(!user) { done(null, false, { message: 'Incorrect username.' }); } else if(user.password != password) { done(null, false, { message: 'Incorrect password.' }); […]

用于多策略sigup用户表的架构

在一个项目上工作时,面临不同的护照策略(本地,脸谱,微博)存储用户信息的问题。 在开始我的UserSchema有这样的样子: User = mongoose.Schema( { "email" : { type : String , lowercase: true , trim : true , unique : true } , "providerId" : { type : String } , "providerName" : { type : String } , "hashedPassword" : { type : String } , "salt" : { type : String […]

由于“AuthorizationError”,未能从passport-facebook发现服务器错误

我遇到了一些与passport-facebook和nodejs / express有关的问题。 成功login处理得很好。 但是,由于某种原因,当一个FB连接login失败时,我的应用程序会抛出一个服务器错误,这个错误不会被捕获,并返回状态500.我相信我使用了一个相当标准的护照configuration,所以我有点卡住了成为问题。 在这种情况下,为了创build一个错误,我从另一个应用程序的testing用户login到我的沙盒应用程序。 错误/堆栈跟踪表示错误是在我没有触及的模块代码中: 在Strategy.OAut2(/用户/用户名/Sites/node_projects/applicationname/node_modules/passport-facebook/lib/strategy.js:84:41)(/Users/username/Sites/node_projects/applicationname/node_modules/passport/lib/passport/middleware/authenticate.js (/ Users / username / Sites / node_projects)上的Passport.authenticate(/Users/username/Sites/node_projects/applicationname/node_modules/passport/lib/passport/middleware/authenticate.js:244:7) /applicationname/node_modules/express/lib/router/index.js:164:37)param(/Users/username/Sites/node_projects/applicationname/node_modules/express/lib/router/index.js:138:11)at在Router._dispatch(/ Users / username / Sites / node_projects)传递(/Users/username/Sites/node_projects/applicationname/node_modules/express/lib/router/index.js:145:5) /applicationname/node_modules/express/lib/router/index.js:173:5)在Object.router(/Users/username/Sites/node_projects/applicationname/node_modules/express/lib/router/index.js:33:10 )(/Users/username/Sites/node_projects/applicationname/node_modules/express/node_modules/connect/lib/proto.js:193:15) 这是非常标准的路线: app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/#', failureRedirect: '/#login' })); req.query是 {"error_code":"2102","error_message":"User is not a test user owned by the application"} 在阅读了这个固定的问题之后( https://github.com/jaredhanson/passport-oauth/issues/16 ),我添加了中间件,以便req.query是: {"error_code":"2102","error_message":"User is not a test user […]

Passport.js twitter身份validation导致500错误,req.session未定义

我正在尝试使用passport-twitter在Node应用程序中设置会话,这样我就可以保存用户数据,但是从我所知道的情况来看,我无法打开会话支持。 另外,我确保callback函数与Twitter Developers上的应用程序条目匹配。 程序抛出的500错误是: 500 Error: OAuthStrategy requires session support. Did you forget app.use(express.session(…))?** at Strategy.OAuthStrategy.authenticate (/Users/xxxxxxxx/web/Node/on/node_modules/passport-twitter/node_modules/passport-oauth1/lib/strategy.js:120:41) at Strategy.authenticate (/Users/xxxxxxxx/web/Node/on/node_modules/passport-twitter/lib/strategy.js:85:40) …. 当我在120行检查strategy.js时,它说: if (!req.session) { return this.error(new Error('OAuthStrategy requires session support. Did you forget app.use(express.session(…))?')); } 所以,显然req.session是未定义的。 不过,我想我已经做了我需要的一切来获得会议支持工作。 这里是我的主要服务器js文件的大部分: var express = require('express'), app = express(); var http = require('http'), https = require('https'); var mongodb […]

与明文护照:序列化问题与自定义身份validation方法

#set up passport LocalStrategy = require('passport-local').Strategy passport.use(new LocalStrategy({usernameField: 'email'}, (email, password, done) -> User.findOne({ email: email }, (err, user) -> console.log("findone") if err? console.log "error" return done(err) if not user console.log("incorrect username") return done(null, false, { message: 'Incorrect username.' }) if password isnt user.password console.log "NOT" return done(null, false, {message: "Incorrect password" }) console.log "BUT […]

护照js如何configuration某人保持login状态?

在http://passportjs.org/或任何其他地方,如何正确设置用户保持login状态似乎无法find任何内容。 我目前在我的开发机器上获得了本地通行证,但是我不知道login的持续时间是多less,并且找不到有关更改设置的任何信息。 这是因为它被设置在快递或我失踪的东西?

Passport.js只redirect到失败页面,而不调用LocalStrategy

在我的Express.js小应用程序中,Passport.js存在持久性问题:无论我放在LocalStrategy中,我总是被redirect到failureRedirect,显然没有通过LocalStrategy传递…我错了什么? 我怎样才能打印/显示最大的错误日志来跟踪执行? var express = require('express'), passport = require('passport'), LocalStrategy = require('passport-local').Strategy; http = require('http'), path = require('path'), mysql = require('mysql'), flash = require('connect-flash'); var app = express(); // SQL connexion var sqlInfo = { host: 'localhost', user: 'root', password: '', database: 'mex' }; global.client = mysql.createConnection(sqlInfo); client.connect(function(err) { if(err) console.log(err); }); app.configure(function(){ app.set('views', __dirname+'/views'); […]