Tag: passport.js

了解Express中的callback

我想从passport.js身份validation文档中了解以下示例: app.get('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/login'); } req.logIn(user, function(err) { if (err) { return next(err); } return res.redirect('/users/' + user.username); }); })(req, res, next); //***UNSURE ABOUT THIS*** }); 我明白代码的作用 – 但是我不知道callback函数结尾的(req, res, next)是什么。 为什么有必要? 它是否提供(err, user, info) ? 如果是这样的话,为什么我没有看到更多的以参数结尾的函数调用 […]

Node.js Express + Passport + Cookie会话n> 1个服务器

从护照文档: 在典型的Web应用程序中,用于authentication用户的凭证只会在login请求期间传输。 如果validation成功,会话将通过在用户浏览器中设置的cookie来build立和维护。 每个后续请求将不包含凭据,而是标识会话的唯一Cookie。 为了支持login会话,Passport将序列化和反序列化会话中的用户实例。 因此,鉴于身份validation是在客户端的浏览器中维护的,我应该能够将Web服务器扩展到大于1(每个服务器使用相同的数据库),并且Passport将用户从存储在cookie中的ID反序列化,而不pipe服务器是否看到用户之前。 如果服务器之前见过用户,但没有cookie,我希望Passportauthentication失败,但是我甚至不能用n> 1的服务器获得这么多。 1服务器进程,护照工作正常: 服务器或多或less是两个服务器上的文档的完整文档(经过大量的试验,连接参考文献等): app.configure(function() { app.use(express.static('public')); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({ secret: 'keyboard cat' })); app.use(passport.initialize()); app.use(passport.session()); app.use(app.router); }); 当用户login成功时,在我返回HTTP请求之前,我logging了req.user和req.session : console.log(req.user); console.log(req.session); res.send(200, req.user); // {"cookie":{ // "originalMaxAge":null, // "expires":null, // "httpOnly":true, // "path":"/" // }, // "passport":{"user":"ID"}} 当HTTP请求返回时,Web应用程序请求/并期望服务器从传递的cookie中设置具有ID ID req.user : passport.deserializeUser(function(req, user_id, cb) { console.info('Passport deserializing user: […]

使用Passport基于dynamic路由进行身份validation

我正在用Node.js创build一个API,并且我有一些我想要保护的端点。 为了简单起见,我们假设我为所有端点使用HTTP基本身份validation( passport-http )。 我最想做的就是确保像这样的路由: api.example.com/users/:uid/ : api.example.com/users/:uid/只能由具有该ID的用户访问。 我可以这样做: app.get('/users/:uid', passport.authenticate('basic', { session: false }), function (req, res, next) { if (req.params.uid !== user.id) { return next(new Error('Unauthorized')); } return next(); }, function (req, res, next) { // do secret stuff } ); 但是我想知道是否有办法通过使用Passport本身来添加额外的中间件: app.get('/users/:uid', passport.authenticate( ??? ), function (req, res, next) { // do […]

快速会话不会注销

代码 app.js: var express = require('express'); var session = require('express-session'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var mongoStore = require('connect-mongo')(session); var mongoose = require('mongoose'); var passport = require('passport'); var config = require('./config'); var routes = require('./routes'); var mongodb = mongoose.connect(config.mongodb); var […]

使用passport-google-oauth2与Facebook和Google进行身份validation

我正在尝试使用passport-google-oauth2和passport-facebook分别passport-facebook和Google进行身份validation。 我的auth文件夹的项目结构如下所示: auth/facebook index.js login.js verifyCallback.js auth/google index.js login.js verifyCallback.js auth / google代码如下所示: verifyCallback.js var User = require('../../models/user'); module.exports = function(accessToken,refreshToken,profile,done){ function findOrCreateUser(){ console.log(profile); User.findOne({'google.id':profile._json.id},function(err,user){ if(err){ console.log("An error occured when logging in with google"); console.error(err); done(err); } else if(user) { console.log("User exists in google verify callback"); console.log(user); done(null,user); } else{ console.log("Creating a new user in […]

如何在本地禁用passportjsauthentication

我在我的本地testing我的基于MEAN堆栈的应用程序。 对于使用passportjs的身份validationfunction。 但是,在debugging时,我必须login每次我重新启动服务器。 有没有一个简单的configuration,我可以做,禁用passportjs没有chaning我的代码很多。

用Node.JS将一个函数的值返回给另一个函数

我正在使用MEAN堆栈的login界面。 我设法使用PassportJS来运行它。 我现在的问题是我需要一种方法让我的客户端知道login的用户是pipe理员还是用户(用户angular色)。 这些信息可以从我的MongoDB中获得。 我的API调用stream程如下: app.post('/login', passport.authenticate('local'), authRoutes.loginCheck); 首先,它运行passport.authenticate它调用下面的函数 function verifyCredentials(username, password, done) // username & password from what user provide when logging in { console.log('VC'); User.findOne({username: username}, function(err, user) //query Mongo { console.log(user); // User role is available here, in JSON format if(user === null) // if no username in database, do this { […]

如何在angular度全堆生成器生成的已authentication端点中运行超类

我正在尝试使用supertest来testing我使用yeoman angular度全堆栈生成器进行身份validation的设置的行为。 我尝试使用supertests文档中描述的简单auth,但我仍然得到404错误。 端点和testing按以下方式进行configuration: 服务器/ API /事/ index.js 'use strict'; var express = require('express'); var auth = require('../../auth/auth.service'); var controller = require('./thing.controller'); var router = express.Router(); router.get('/', auth.isAuthenticated(), controller.index); module.exports = router; fullstack-DEMO /服务器/ API /事/ thing.spec.js 'use strict'; var should = require('should'); var app = require('../../app'); var request = require('supertest'); var User = require('./user.model'); […]

什么是防止api请求泛滥/滥用的策略?

我的服务器(节点)上有一个将新数据写入我的数据库的API。 要使用API​​,用户需要提供一个充当标识符的标记。 所以如果有人淹没我的数据库或滥用API,我可以告诉它是谁。 但是,我可以使用哪些技术来防止洪泛或挂起我的服务器的能力呢? 请注意,对API的大部分请求都是由服务器本身完成的,所以从理论上讲,我可能会从我自己的服务器地址中获得几十个请求。 我很想得到一些参考资料。 谢谢!

谷歌Oauth给代码赎回错误

您好我工作的用户通过谷歌帐户login项目(本地主机)我已经实现了谷歌注册。 只要我从我的帐户login,我收到以下错误。 TokenError: Code was already redeemed. at Strategy.OAuth2Strategy.parseErrorResponse (c:\Projects\Internship_rideshare\node_modules\passport-google-oauth\node_modules\passport-oauth\node_modules\passport-oauth2\lib\strategy.js:298:12) at Strategy.OAuth2Strategy._createOAuthError (c:\Projects\Internship_rideshare\node_modules\passport-google-oauth\node_modules\passport-oauth\node_modules\passport-oauth2\lib\strategy.js:345:16) at c:\Projects\Internship_rideshare\node_modules\passport-google-oauth\node_modules\passport-oauth\node_modules\passport-oauth2\lib\strategy.js:171:43 at c:\Projects\Internship_rideshare\node_modules\passport-google-oauth\node_modules\passport-oauth\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:176:18 at passBackControl (c:\Projects\Internship_rideshare\node_modules\passport-google-oauth\node_modules\passport-oauth\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:123:9) at IncomingMessage.<anonymous> (c:\Projects\Internship_rideshare\node_modules\passport-google-oauth\node_modules\passport-oauth\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:142:7) at IncomingMessage.emit (events.js:129:20) at _stream_readable.js:908:16 at process._tickCallback (node.js:355:11) 我的代码如下(谷歌login代码片段): – passport.use(new GoogleStrategy(google, function(req, accessToken, refreshToken, profile, done) { if (req.user) { User.findOne({ google: profile.id }, function(err, existingUser) { if (existingUser) { console.log('There […]