Articles of passport.js

简单的login页面在nodejs中使用快速和护照与mongodb

我在/ login中使用Jade和Express创build了一个简单的login表单,表单数据通过POST发送到/ login 起初它只是基于string的匹配(如果用户名== &&密码==)然后redirect到/ home或redirect到/login 简单。 现在我想把它的数据库驱动程序,用户名和密码存储在一个mongodb数据库,从数据库匹配用户名密码,并进行诉讼。 我希望为此使用passportJS,但是我完全感到震惊,从创build数据库到configuration护照。 有人可以帮助我如何做一个简单的数据库驱动的login页面? 我很新的nodejs的东西。 任何帮助将认真感激

Passport.js无法序列化用户

我只为Google,Facebook和Twitterlogin使用passport.js。 Node.js v0.8.19与express.js 3.1.0和passportjs版本0.1.16。 (护照 – 脸书-0.1.5,推特 – 0.1.4护照 – 眼睛 – 奥法 – 0.1.5) 一切运行正常,一小时左右的应用程序运行passport.js停止序列化用户进入req.user会话。 Facebook和谷歌正在从各自的API接收全部数据的含义 passport.use(new FacebookStrategy({ clientID: FACEBOOK_APP_ID, clientSecret: FACEBOOK_APP_SECRET, callbackURL: "http://localhost:3000/auth/facebook/callback" }, function(accessToken, refreshToken, profile, done) { var temp = {} temp.name = profile.displayName temp.id = profile.id console.log(temp) return done(null, temp); })); 这里console.log将成功打印用户ID和名称,但是在调用之后 passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) […]

Passport-Google-OAuth回拨不起作用

我有以下节点代码使用passport-google-oauth … app.get('/auth/google', passport.authenticate('google', { scope : ['profile', 'email'] })); app.get('/auth/google/callback', function(req,res) { console.log("callback"); passport.authenticate('google', { successRedirect : '/signin', failureRedirect : '/signin' }); }); 和… passport.serializeUser(function(user, done) { console.log("ser"); done(null, user.id); }); passport.deserializeUser(function(id, done) { console.log("des"); User.findById(id, function(err, user) { done(err, user); }); }); passport.use(new GoogleStrategy({ clientID : 'id', clientSecret : 'key', callbackURL : 'http://host/auth/google/callback', […]

Facebook与智威汤逊护照

我一直在我的服务器上使用Passport进行用户authentication。 当用户在本地login(使用用户名和密码)时,服务器发送一个存储在本地存储中的JWT,并在需要用户authentication的每个api调用中发送回服务器。 现在我想支持Facebook和Googlelogin 。 自从我开始使用Passport以来,我认为最好是继续使用Passport策略,使用passport-facebook和passport-google-oauth 。 我会提到Facebook,但是这两种策略都是一样的。 他们都需要redirect到服务器路由( '/ auth / facebook'和'/ auth / facebook / callback' )。 这个过程是成功的保存用户,包括他们的Facebook的\谷歌ID和令牌的数据库。 在服务器上创build用户时,会创build一个JWT(不需要依赖从facebook \ google收到的令牌)。 … // Passport facebook startegy var newUser = new User(); newUser.facebook = {}; newUser.facebook.id = profile.id; newUser.facebook.token = token; // token received from facebook newUser.facebook.name = profile.displayName; newUser.save(function(err) { if (err) throw err; […]

用户帐户激活,电子邮件确认和Passport / Node.Js邀请

我想为在Passport / Neo4J上运行的用户authentication系统设置三件事情: 1)手动用户帐户激活(以便pipe理员); 2)只邀请帐户的创build; 3)激活之前的电子邮件确认帐户; 我想知道是否你知道任何易于使用的Passport插件(我还没有find自己的,但也想要你的build议),也是 – 实现它的最好方法是什么(也许你已经完成/看到它,所以你可以分享代码?) 谢谢!

在passport.js或session中的某处添加用户对象中的额外信息

我想在来自mongodb的用户对象中添加自定义键,这将被passport.js使用,但是我想知道为什么我不能将更多的键添加到该对象中,这里是我的代码。 passport.use(new LocalStrategy( function(username, password, done) { Users.model(false).findOne( {email:username,password:encodePassword(password) }, function(err, user) { if( err ){ // validation failed console.log('Error Occurred'); return done(err); } else if(user != null){ user['customKey'] = "customValue"; // it is not setting console.log(user); return done(null, user); } else { return done(null, false, { message: 'Incorrect username.' }); } }); } )); […]

护照令牌authentication*无*数据库会话

我正在寻找一种方法来使用Passport.js的Twitter策略,而不使用数据库中的会话集合/表。 原因是我们将会话集合中的所有数据都保存得很大,每当用户发出请求时我们都会保存数据库往返,因为我们不必每次都去DB去获取会话数据。 无论如何,我们应该能够使用令牌(JSON Web令牌)来validation用户,这篇文章如何描述: https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens 但是我很困惑,为什么没有一个简单的方法来做这个护照? (这篇文章没有护照什么都可以做 – 但是Passport已经包括了这个?)。 也许我正在推翻这一点,而这样做只是为了省略我在Express中使用DB会话的呼叫,然后Passport已经足够聪明来处理JWT了? 不知何故,我怀疑这一点。 例如,在我的Express服务器中注释掉这些代码当然是不够的。 //app.use(expressSession({ // secret: 'arrete_x_paulette', // store: new MongoStore({mongooseConnection: mongoose.connection}), // saveUninitialized: true, // resave: true, // cookie: { // secure: false, // maxage: 6000000 // }, // proxy: false //})); 和 //app.use(passport.session()); 那么使用护照就足够了? 为什么有人会使用基于JWT的身份validation来使用存储在数据库中的会话?

用户点击后退button,而会话仍然被authentication,并被redirect到node.js中的login页面

我有一个简单的Web应用程序,它有一个login屏幕和一个活动页面,只有当用户提供有效的凭据时才可以访问。 假设用户点击有效凭证login,并被redirect到活动页面。现在,用户不会点击注销,而只需点击浏览器的后退button并返回到login页面。 这种行为显然是非直观的,我假设用户login时,他/她点击后退button,保持在同一页面,而不是回到login页面。 function loginUser(req, res) { if (req.session.auth) // if user is still authenticated { res.redirect('/activity'); } res.render('login'); } 这是我目前使用的一种简单的方法,总是将用户redirect到活动页面,但是我觉得这是一个资源浪费的方法,因为存在不必要的redirect。 我的问题是,这是执行上述行为的标准和最干净的方式还是有更好的机制? 我正在使用护照进行身份validation并存储jwt令牌。 编辑:重新迭代上面的解决scheme工作只有浏览器没有caching启用,相反,login路由控制器甚至没有被调用,因为浏览器已caching页面。 我正在寻找更强大的东西。 我认为将浏览器硬编码为不在生产环境中caching页面是一种好的做法。

Angular JS + Node JS + Passport + Spring OAuth2authentication/授权

我是PassportJS和AngularJS的新手,我对如何继续这个授权有疑问。 我有Spring REST API由Oauth2保护,但是我必须像这样发送用户凭证: [http://localhost:8080/myapp/oauth/token] grant_type=password&username=email&password=password&client_id=09e749d8309f4044&client_secret=189309492722aa5a&scope=read 在客户端我的应用程序我使用护照,我想授权/authentication我的用户,我怎样才能为此创build一个战略? 我将在这里发送我的服务器configuration和我的安全库。 Server.js var fs = require('fs'); var http = require('http'); var https = require('https'); var privateKey = fs.readFileSync(__dirname + '/cert/privatekey.pem').toString(); var certificate = fs.readFileSync(__dirname + '/cert/certificate.pem').toString(); var credentials = {key: privateKey, cert: certificate}; var express = require('express'); var config = require('./config.js'); var passport = require('passport'); var security = […]

如何更新由passportjs设置的req.user会话对象?

我试图做很多天,但所有的testing失败… 我的平台上的用户使用passportjs策略(paypal,facebook,google …)连接它们。 当用户连接时,我在标题的右侧写上他的昵称。 头文件的html代码是从handlebars模板生成的,当这个部分由expressjs服务的时候,我把req.user会话对象发送给模板,以便编写昵称和其他信息。 顺便说一下,这工作的很好,但我有一个问题,当用户从他的configuration文件更新他的昵称,我不能更新服务器端的会话对象,如果用户重新加载页面,旧的昵称再次出现。 而且我不想每次用户加载一个页面都要求数据库的用户信息,所以我想保留这个configuration: // — Passport session setup passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); 我的中间件设置当地人: // — Set accessible datas from the template res.locals = _.extend(res.locals, { user: req.user, query: req.url, title: app.config.title, url: app.config.url }); 我失败了: // Trying to update req.user directly : not […]