Articles of passport facebook

如何在服务器身份validation后使用JSON Web令牌提供前端?

到目前为止,我只处理服务器呈现的应用程序,在用户通过用户名/密码login或使用OAuth提供程序(Facebook等)后,服务器只是在redirect到相关页面时设置会话cookie。 然而,现在我试图用一种更现代的方法构build一个应用程序,在前端和一个JSON API后端上都有React。 显然这个标准的select是使用JSON Web令牌进行身份validation,但是我很难解决如何为客户端提供JWT,因此可以将其存储在会话/本地存储或任何地方。 举例说明更好: 用户点击链接( /auth/facebook )通过Facebooklogin 用户被redirect并显示Facebooklogin表单和/或权限对话框(如有必要) Facebook将用户redirect到/auth/facebook/callback ,授权码被拖拽,服务器通过访问令牌和一些关于用户的信息进行交换 服务器使用info在数据库中查找或创build用户,然后创build一个包含用户数据相关子集(如ID)的JWT, ??? 在这一点上,我只是希望用户被redirect到React应用程序的主页(比方说/app ),因此前端可以接pipe。 但我不能想到一个(优雅)的方式来做到这一点,而不会丢失JWT,除了把它放在redirect的查询string中( /app?authtoken=… ) – 但是会显示在地址栏中,直到我用replaceState()或者其他方法手动删除它,并且对我来说似乎replaceState() 。 真的,我只是想知道这是如何做的,我几乎可以肯定我在这里失去了一些东西。 服务器是节点(Koa与护照),如果有帮助。 编辑:为了清楚,我问了什么是使用Passport OAuthredirectstream后 ,提供一个令牌给客户端(这样可以保存)的最佳方法。

如何在angular度客户端处理passport-facebookcallback?

我正在开发一个MEAN应用程序。 我正在使用护照进行身份validation – 本地,Facebook和谷歌战略。 我正在使用angularjs客户端。 所有的路由都在客户端处理。 我只使用服务器数据apis。 当使用passport-facebook策略时,我按照护照文档在节点服务器上使用下面的代码。 app.get('/auth/facebook',passport.authenticate('facebook-auth', { scope : ['email'] })); app.get('/auth/facebook/callback',passport.authenticate('facebook-auth', { successRedirect : '/home', failureRedirect : '/login', scope:['email'] })); 我面对的问题是当用户点击“使用Facebooklogin”button <a href="/auth/facebook" class="btn"><i class="fa fa-facebook"></i> Sign in using Facebook</a> 客户端将访问“/ auth / facebook”路线,最终将用户redirect到Facebook页面以validation用户的凭证。 validation成功后,用户将被redirect到按照“successRedirect”值定义的路由“/ home”。 现在的事情是,我想使用自定义callback函数,而不是定义成功或失败的redirect。 它将如下所示: app.get('/auth/facebook/callback',passport.authenticate('facebook-auth', function(err,user,info){ if(err){ throw err; } else if(user === 'userexists'){ res.json({ 'state':false, 'message':'User […]

如何发送json作为护照validation后的响应在node.js中

我正在尝试这个git的例子 。 当我将其与我的项目集成在一起时效果很好,但是我想实现的是将json作为对客户端/请求的响应发送,而不是successRedirect:'/ profile'&failureRedirect:'/ signup'。 是否有可能发送一个json,还是有一些其他方法得到相同的? 任何帮助将不胜感激,恩

用Passport和ExpressJS进行Facebook身份validation – 为什么validationcallback没有被调用?

我是Passport在ExpressJS应用程序中对用户进行身份validation。 我试图将所有的Facebook路线放在他们自己的模块中,因为我打算支持其他OAuth提供商。 在我的启动脚本中,我定义了所需的FB端点: var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var facebook = require('./routes/facebook'); var login = require('./routes/login'); var http = require('http'); var path = require('path'); var app = express(); /* Configuration stuff here*/ // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/login', login.index); app.get('/auth/facebook', facebook.fb_auth); app.get('/auth/facebook/callback', facebook.fb_callback); […]

req.session.passport和req.user空白,req.isAuthenticated在初次成功login后使用passport-facebook返回false

在Facebook上初次成功login并使用passport-facebook 1.0.3和express 4.6.1进行loginredirectcallback之后,req.session.passport和req.user包含serialize调用期间设置的值(我从stragegy获得),但在后续访问站点上的不同路由时,req.session.passport和req.user为空,req.isAuthenticated()返回false,因此在从FB初始成功login后,所有其他路由上的ensureAuthentication方法失败。 我没有使用集群设置,所以我相信内存存储就足够处理这个,快速configuration看起来很好(我的意思是顺序),这里是我的快速configuration configExpressApp.set('views', './views'); configExpressApp.set('view engine', 'jade'); configExpressApp.use(morgan('dev')); configExpressApp.use(cookieParser()); configExpressApp.use(bodyParser.urlencoded({ extended: true, })); configExpressApp.use(bodyParser.json()); configExpressApp.use(expressSession({ secret:'MyExpressSecret', saveUninitialized: true, resave: true })); configExpressApp.use(passport.initialize()); configExpressApp.use(passport.session()); configExpressApp.use(methodOverride()); configExpressApp.use(express.static('./public')); 这是req.session对象初始的成功login和redirect,req.user包含与req.session.passport.user相同的数据 { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }, passport: { user: { _id: 53ce23e3121421f229a438f8, info: false, loginType: 'fb', fbId: 'MyId', name: 'Karthic Rao', […]

混合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 }); } […]

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-facebook从Facebook上检索照片

我可以通过passport-facebook获取基本的用户信息,按照下面的代码保存在mongodb中: app.get("/auth/facebook", passport.authenticate("facebook", { scope : ["email", "publish_stream", "user_location", "user_hometown", "user_birthday", "read_friendlists"]})); app.get("/auth/facebook/callback", passport.authenticate("facebook",{ successRedirect: '/', failureRedirect: '/'})); var mongoose = require('mongoose'), FacebookStrategy = require('passport-facebook').Strategy, Users = mongoose.model('Users'); module.exports = function (passport, config) { passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { Users.findOne({ _id: id }, function (err, user) { done(err, user); }); }); […]

Angular / Node / Express / Passport跨域问题 – 启用CORS Passport Facebook身份validation

尝试使用Passport在NodeJS / Express中使用Facebook对用户进行身份validation时,已经有两天,一百万次尝试启用CORS。 我在Chrome上遇到的错误是这样的: XMLHttpRequest cannot load https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http%…%3A8080%2Fauth%2Ffacebook%2Fcallback&scope=email&client_id=598171076960591. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. 我使用的路线非常简单: // ===================================== // FACEBOOK ROUTES ===================== // ===================================== // route for facebook authentication and login app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' })); // handle the callback after facebook has authenticated […]

passport.js与多个身份validation提供程序?

使用Passport.js有没有办法让我为相同的路由指定多个身份validation提供程序? 例如(从护照指南)我可以在下面的示例路线上使用本地和Facebook和Twitter策略? app.post('/login', passport.authenticate('local'), /* how can I add other strategies here? */ function(req, res) { // If this function gets called, authentication was successful. // `req.user` contains the authenticated user. res.redirect('/users/' + req.user.username); });