Articles of passport.js

通过我的REST API和Facebook进行用户身份validation

我对如何正确安全地使用REST API对用户进行身份validation以及使用其他OAuth 2.0提供程序(例如Facebook,Google等)进行身份validation提供和select有些困惑。 脚本 用户与一个应该使用我的REST API的Web应用程序进行交互。 用户应该能够使用用户名/密码以及使用Facebook等第三方服务login和执行CRUD操作。 我将使用SSL来encryption网站和API的stream量。 没有考虑到第三方login服务,通过研究这里已经提到的各种问题,我想到如图所示的处理用户authentication。 技术和当前的想法 REST API是使用NodeJS和Express使用JS编写的。 通过另一个NodeJS实例提供的WebApp大部分是AngularJS,其中的模板使用了REST API。 我目前的想法是让WebApp处理login序列,并让Facebook使用callback将他们的令牌保存在我的数据库中。 但是这个解决scheme太多的解决方法了! 问题 图像中描述的validation序列是否正确? 上述authentication顺序与OAuth2.0中的资源所有者密码凭证stream程相比如何? 值得使用OAuth2.0而不是它? 我怎样才能通过第三方(即Facebook)整合login? 任何build议或(更好)的例子? 参考 passport.js RESTfulvalidation 用facebooklogin并使用oauth 2.0进行REST API调用的authentication 和其他许多人在这里:)

混合passport-facebook和passport-jwt的最佳方法是什么?

我对Node.js的开发很陌生,目前正忙于在空闲时间开发一个宠物项目。 到目前为止,我已经使用passport和passport-jwt为策略创build了JWT身份validation,并将其用于所有RESTful API。 现在我正在考虑将这个与某种Facebook身份validation混合在一起,仍然想要使用令牌身份validation。 目前这是我如何产生和获得令牌: exports.authenticate = function(req, res) { User.findOne({ email: req.body.email }, function(err, user) { if (err) return res.status(400).send(getErrorMessage(err)); if (!user) { res.status(400).send({ success: false, message: 'Authentication failed. User not found.' }); } else { if (user.checkPassword(req.body.password)) { let token = jwt.encode(user, config.secretPhrase); res.json({ success: true, token: 'JWT ' + token }); } […]

nodejs是不是感觉时间漂移?

我正在解决OAuth身份validation问题(invalid_grant),其中两个可能的原因之一是服务器的时钟与NTP不同步。 我确保服务器的时钟是同步的。 nodejs是否实例化自己的时钟或引用系统时钟? 我期望它会引用系统时钟。 我只问,因为重新启动nodejs暂时修复问题(invalid_grant),我想排除时间同步。

我怎样才能使用passportjs和reactjs?

我有3个意见,(首页,注册,login)在reactJs,我想在我的项目中使用护照,但我不知道该怎么做,我有护照可configuration,它的url工作。 我能做些什么来pipe理会议和用户数据,就像我们在ejs或者玉石中那样?

在使用PassportJS的Session中修改user.username

我有一个表单,允许用户更新他们的个人资料信息,这些信息由来自req.user数据通过PassportJS填充。 问题是,每当我更新对应于user.username的值,我得到以下错误信息: TypeError: Cannot read property '_id' of null 从这段代码的第6行: passport.deserializeUser(function(id, done) { mongo.connect("mongodb://localhost:27017/formulas", function(e, db){ if (e) {return next(e);} var col = db.collection("users"); col.findOne({"username": id}, function(err, user){ done(err, {"id": user._id, "username": id, "activeEmail": user.activeEmail, "name": user.name, "password": user.password, "formulas": user.formulas}); }); }); }); 我假设这是因为在serializeUser我使用user.username加载到会话如下所示: passport.serializeUser(function(user, done) { done(null, user.username); }); 有谁知道如何解决这个问题呢,还是Passport难以解决的问题? 我有这样的更新一般的代码如下所示: router.post('/update-profile', function(req, […]

从移动客户端执行oAuth的“正确”方式

我正在构build一个跨平台的移动应用程序(使用Xamarian工具,MonoTouch / MonoDroid)。 我正在尝试通过身份validation工作stream程,正在陷入绊脚石。 我已经搜遍了一个明确的答案,还没有find它。 这里是我目前的设置的概述。 我有一个build在nodejs中的网站。 我使用passport.js在网站上进行oAuthlogin。 这很好,用户可以使用Twitter或Facebooklogin到我的网站。 现在我想将这个相同的loginfunction扩展到我的移动客户端。 我看到2个选项 将应用程序ID和应用程序密码embedded到移动客户端,并从移动应用程序直接向FB或Twitter发送oAuth调用 通过我现有的nodejs web服务器代理oAuth调用(保留服务器上的密钥) 选项2似乎是首选的方式(因为它避免了在移动应用程序中“运送”秘密)。 我有代理方法主要工作。 我在移动客户端打开一个WebView,并将其指向http://mysever/auth/twitter 这通过我现有的passport.js代码运行,并将移动WebViewredirect到Twitterlogin页面。 用户然后在设备上的twitter网页上input他们的信用。 Twitter然后调用我的oAuthcallbackURL(这是我的nodejs web服务器)。 我的服务器和Twitter处理后面第四次握手获取用户configuration文件信息( 据我所知,这是这种方法的关键,我的服务器和叽叽喳喳处理握手,移动客户端不必做任何事情或通过在这个过程中的任何令牌 ) 这是我的问题 : 这是我的最后一步。 一旦我的服务器上的握手完成,我有我需要在服务器上的用户信息, 需要将其发送回移动客户端应用程序 我无法弄清WebView控件中的任何方式来获取响应对象,并获取cookie或标头值(例如)(对于Android和iOS来说,这似乎是正确的)。 我不认为这是平台特定的。 我想我正在尝试做一些移动平台上的WebView小部件,但是并不支持。 这让我觉得我失去了一些明显的东西。 我唯一想到的是让我的networking服务器将移动客户端浏览器“redirect”到查询string中具有用户信息的假URL。 像myapp:// info?userid = 1234 然后在移动应用程序中,我可以劫持URL加载,并抓住这个url,并获得我需要的数据。 然后,我可以隐藏这个用户信息,closuresWebView控件,并移动到我的移动应用程序中的本地屏幕,并在随后的REST调用中将用户信息作为识别用户的手段用于我的nodejs服务器。 由于多种原因,这是大规模的。 其中最大的一点就是url是通过未encryption的线路发送的,并且所有的数据都是纯文本的。 从Web服务器获取数据返回给移动客户端还有更好的方法吗? 还是我做错了?

Nodejs + Passport:如何添加更多的用户信息

我是Nodejs新手,正在寻找一个用户凭证pipe理,我看到Passport是一个不错的select。 但在Passport的注册策略中,我只看到保存的用户信息是电子邮件和密码。 我需要更多的用户信息,如全名,工作,注册时间,上次活动时间等。 那么我怎样才能在护照上做到这一点?

阻止访问AngularJS中的pipe理页面

我想知道AngularJS中最好的方法是保护pipe理页面,即普通用户不应该看到的页面。 显然,会有后端authentication,但由于AngularJS应用程序是客户端,人们仍然可以从理论上看路由,直接转到这些URL并查看pipe理页面。 我使用Express,PassportJS和MongoDB(Mongoose)作为我的后端。 自然,他们将无法与pipe理页面进行交互,因为在创build,删除服务器端身份validation,但我宁愿甚至不提供页面给用户,如果他们没有适当的访问。 由于该应用程序是完全客户端JS,但我认为这是不可能的,因为人们可以修改路由和其他东西。 最好的办法是什么呢? 感谢您的任何意见!

无论如何设置passportjs的代理设置?

目前,我正在使用基于expressjs和使用passportjs( http://passportjs.org/ )进行yammer身份validation的sails框架。 在公司代理后面的服务器上部署节点应用程序时遇到问题。 无法连接到yammer进行OAuth2身份validation。 错误如下: 错误:无法获取访问令牌(错误:连接ETIMEDOUT) at /root/rlps/node_modules/passport-yammer/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:125:38 在/root/rlps/node_modules/passport-yammer/lib/passport-yammer/strategy.js:72:20 在ClientRequest。 (/root/rlps/node_modules/passport-yammer/node_modules/passport-oauth/node_modules/oauth/lib/oauth2.js:129:5) 在ClientRequest.EventEmitter.emit(events.js:95:17) 在CleartextStream.socketErrorListener(http.js:1547:9) 在CleartextStream.EventEmitter.emit(events.js:95:17) 在Socket.onerror(tls.js:1437:17) 在Socket.EventEmitter.emit(events.js:117:20) 在net.js:441:14 在process._tickDomainCallback(node.js:459:13) 我相信这是因为代理阻塞了路。 我试图设置一切环境值(如http_proxy和https_proxy),但似乎代码不承认他们,需要在passportjs中的某处configuration它。 那么,在passportjs中设置代理设置或在nodejs中解决这个代理问题的任何好方法?

有或没有令牌JWT + PASSPORT的路线可用

我希望我可以使用或不使用令牌来访问路由器。 如果用户有一个令牌,比给我req.user 喜欢这个: router.get('/profile', function(req, res) { if(req.user) { // or if (req.isAuthenticated()) res.send('logged') } else { res.send('not loggedIn') } }); 我的应用: var JwtStrategy = require('passport-jwt').Strategy, ExtractJwt = require('passport-jwt').ExtractJwt; var opts = {} opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); opts.secretOrKey = 'sh'; passport.use(new JwtStrategy(opts, function(jwt_payload, done) { User.findOne({id: jwt_payload.sub}, function(err, user) { if (err) { return done(err, false); […]