Tag: passport.js

基本示例中护照authentication失败

我正试图将这个passport.js例子分解为它最基本的元素。 我一直得到401(未经授权)的消息,不知道为什么。 任何帮助将不胜感激。 谢谢! Node.js文件: var http = require('http'), express = require('express'), passport = require('passport'), LocalStrategy = require('passport-local').Strategy, flash = require('connect-flash'); var port = process.env.PORT || 8080; passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); passport.use(new LocalStrategy( function(username, password, done) { console.log("LocalStrategy working…"); return done(null, { id: 1, username: 'Joe', password: […]

无法使用Passport.js和Express 4访问req.user

我一直在用Passport,Express 4和Jade创build应用程序。 我想向用户显示当他们login时更改的导航栏。 但是,我无法访问除configuration文件页面之外的任何其他页面的req.user,该页面调用isLoggedIn: function isLoggedIn(req, res, next) { // if user is authenticated in the session, carry on if (req.isAuthenticated()) return next() // if they aren't redirect them to the home page res.redirect("/login") } 使用任何其他函数在未login时不redirect用户将导致req.user undefined 。 我得到这样的用户: router.get("/profile", isLoggedIn, function(req, res) { res.render("profile", { title: 'Gebruikersprofiel van ' + req.user.firstname + " " […]

为什么connect-mongo为每个请求创build新的会话?

我有两个nodejs服务器(networking服务器,套接字服务器),通过socket.io互相连接。 在Web服务上,我使用express.js和passport.js作为身份validation中间件。 这是我的networking服务器configuration: var express = require('express'), mongo = require('mongodb'), io = require('socket.io'), passport = require('passport'), LocalStrategy = require('passport-local').Strategy, MongoStore = require('connect-mongo')(express); app.configure(function () { app.use(express.cookieParser()); app.use(express.methodOverride()); app.use(express.bodyParser()); app.use(express.session({ secret: 'keyboard cat', store: new MongoStore({ db: 'MyDatabase' }) })); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); app.use(express.static(__dirname + '/htdocs')); }); 当我使用connect-mongo时,它为每个http请求创build一个新的会话。 这个元素创buildlogin请求: { "_id" : "UCnXade6Bk6ofOZ+jiEgzyH8", "session" : "{\"cookie\":{\"originalMaxAge\":31536000000,\"expires\":\"2014-03-07T13:07:45.703Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{\"user\":\"50cae08806e31ea2e5634e3f\"}}", […]

在node.js中,为什么护照会话在触发'文件'事件时停止强大?

在我的应用程序,我只使用 app.use(express.json()); app.use(express.urlencoded()); 并不是 app.use(express.bodyParser()); 这样我可以手动parsingfile upload。 看来,这一行 app.use(passport.session()); 停止从触发文件事件强大: form.on('file', function(name, file) { //never called }); 我怎样才能使用护照会议,而不是与强大的文件事件冲突?

Passport.jsvalidation不起作用

我正尝试第一次设置护照,只用一个谷歌login选项。 我注册与谷歌apis所以我有所有的设置。 相关代码在下面,但是当我的应用程序进行'/auth/google/'调用时,它只是失败,没有响应或错误消息。 我已经调整了一些configuration的方式无济于事。 我也用console.logreplace了passport.authenticate('google')和一个匿名函数来仔细检查我的Web服务是否正常运行。 所以我知道它正在passport.authenticate('google') 。 // serialize session passport.serializeUser(function (user, done) { done(null, user.id); }); passport.deserializeUser(function (obj, done) { done(null, obj); }); // use google strategy passport.use(new googleStrategy({ clientID: config.google.clientID, clientSecret: config.google.clientSecret, callbackURL: config.google.callbackURL, scope: 'https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile' }, function(accessToken, refreshToken, profile, done) { console.log(profile); } )); app.use(passport.initialize()); app.use(passport.session()); app.get('/auth/google', passport.authenticate('google')); app.get('/auth/google/callback', passport.authenticate('google', […]

“这是不允许的,需要预检的错误”在护照Facebooklogin错误的交叉来源?

我有一个node.js快递应用程序,它提供了RESTful API,我使用的是用于Facebook身份validation的护照。 我启用了服务器端的所有CORSconfiguration,并能够通过jQuery Ajax使用API​​。 但是对于Facebook身份validation,我收到以下错误: XMLHttpRequest cannot load http://localhost:3000/auth/facebook. The request was redirected to 'https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http%…_me%2Cuser_checkins%2Cuser_likes&client_id=12345678&type=web_server', which is disallowed for cross-origin requests that require preflight. / auth / facebook端点是这个。 app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['email', 'user_about_me', 'user_checkins', 'user_likes'], failureRedirect: users.authFailCallback }), users.signin); 所以基本上它被redirect到Facebook的API(302),它不允许CORS。 有什么办法可以解决这个问题吗? 或者我需要从服务器端本身调用Facebook API?

Passport.js不传递用户请求在req.login()

我的passport.jsconfiguration如下所示: const Local = require("passport-local").Strategy; const USMODEL = require("../models/user.js"); passport.serializeUser(function(user, done) { console.log("SERIALIZING USER"); done(null, user.id); }); passport.deserializeUser(function(id, done) { console.log("DESUSER", id); var US = mongoose.model("RegUser", USMODEL); US.findById(id, function(err, user) { done(err, id); }); }); passport.use("local-login", new Local({ usernameField: "email", passwordField: "password", passReqToCallback: true },function(req, email, password, done) { var US = mongoose.model("RegUser", USMODEL); US.findOne({"email": […]

如何在服务器重新启动时在节点js中维护持久性会话?

据我迄今为止从服务器重新启动后,使会话持久性的计算器的答案。 有4种可能的方式,我考虑用我的意思应用程序。 cookie-Sessions https://www.npmjs.com/package/cookie-session 使用Jsonnetworking令牌(JWT) https://www.npmjs.com/package/jsonwebtoken 使用connect-mongo / connect-redis passport.js 现在我的疑问是,如果我将重新启动我的服务器在Mongo和Redis。 会话将仍然在那里,因为他们是外部数据存储。 但如何使我的会话持久使用JWT和cookie会话。 这些会话variables在哪里存储。 在passport.js的情况下,我遇到的解决scheme是使会话持久性是将会话数据存储在connect-mongo / connect-redis中。 有没有其他的方式在护照使会议持续?

我如何强制刷新req.user?

我正在使用本地身份validation策略passport.js为我的node.js / express应用程序。 LocalStrategy返回的用户包括电子邮件和用户名等内容。 我想让用户能够更新他们的电子邮件或用户名内的应用程序。 发生这种情况时,我想告诉护照重新加载用户(就像他们刚刚login一样),以便req.user在会话的其余部分反映已更新的更改。 简单地设置它似乎不会超过这一个请求。 简单的例子: app.get('/changeEmail', function(req, res, next) { var userId = req.user.id; var origEmail = req.user.email; var newEmail = req.param('email'); userDao.updateEmail(userId, newEmail, function(err) { if (!err) { // user's email has changed, need change reflected in req.user from this point on req.user.email = newEmail; } next(); }); });

Sails.js + Passport.js获取当前login的用户

我有一个我正在使用的sails应用程序,我正在使用passport.js进行用户身份validation。 我有login工作,以及保护我的网页,所有系统的政策。 在我的一个页面上,用户正在input信息,所以我需要获取当前login用户的ID。 我为此苦苦挣扎,但最终还是采用了一条路线 在控制器中 $scope.$on('sailsSocket:connect', function(ev, data) { sailsSocket.get( '/get_user', {}, function(response) { $scope.team_id = response.user; sailsSocket.get( '/status_update?sort=createdAt%20ASC&team_id='+$scope.team_id, {}, function(response) { $scope.updates = response; $log.debug('sailsSocket::/status_update', response); }); }); }); 和路由callback get_user: function(req, res) { res.json({user:req.session.passport.user}); }, 这似乎工作正常,但我有几个问题。 a)这是正确的方法吗? 通过路线将这些信息提供给控制器? b)嵌套套接字调用就像这个好习惯? 我是新来的这个堆栈,仍然感觉我通过它的方式,所以任何反馈,非常感激。