如何使用访问令牌在通过twitter.js护照login后validation用户

我需要在我的node.js应用程序上构build一个基于令牌的身份validation,用户可以使用他的Facebook或Twitter凭据login我的应用程序,并使用访问令牌获取资源。 这个postbuild议一旦通过Facebook或Twitter或其他authentication,每个请求使用访问令牌,并不需要会话 例如

GET / api / v1 / somefunction?token ='abcedf'

  1. 客户端从响应中获取访问令牌。
  2. 客户端使用token参数调用一些服务器API。

所以下面的代码是通过twitter授权用户,如果我的应用没有find我的用户信息,那么把用户信息存储到数据库中。

passport.use(new TwitterStrategy({ consumerKey: config.twitter.clientID, consumerSecret: config.twitter.clientSecret, callbackURL: config.twitter.callbackURL }, function(token, tokenSecret, profile, done) { console.log('TwitterStrategy /auth/twitter.............',profile.id, profile.displayName, profile.username, profile.emails[0], profile._json.avatar_url); userModel.findUserByQuery({ 'social.twitter.id': profile.id }, function (err, user) { if (!user) { console.log('twitter user not found'.red); userModel.createNewUser( { username:profile.username, email:profile.emails[0].value, img:profile._json.avatar_url, fullname:profile.displayName, password:profile._json.avatar_url, social:{twitter:{id:profile.id,avatar:profile._json.avatar_url, name:profile.username,token:accessToken} }}, function(err,data){ if(err) return done(err); else if(!data) return done(null, false, { message: 'can not create your profile in database' }); else { console.log('save the new twitter user into database'.green, data._id); return done(err, user); } }) } else { console.log('twitter user found'.green); return done(err, user); } }) } )) 

不过,我有两个问题,

1.如何将访问令牌发送给客户端以满足以下请求

在代码中,经过Twitterauthentication后,我得到访问令牌,并将这个令牌发送到浏览器上的客户端,因为令牌embedded在url参数中,我尝试了代码res.redirect('/ users / profile?token = blabla'),但在客户端浏览器中,url仍显示为“/ users / profile”而不是“/ users / profile? 标记=布拉布拉”

2.一旦通过Twitterauthentication,以下带有令牌的请求将通过我的应用在本地(我将令牌存储在数据库中,并比较以下令牌进行validation)还是仍然要twitter API进行authentication?

如果在第一种情况下,所以我应该将令牌存储到数据库中,以便将以下请求中的令牌中的以下请求与我的应用进行比较? 是对的吗

我也努力得到这个,只是发现这相当相关的答案: 使用2leg oauth令牌调用Bitbucket REST API

我只是不能得到如何做到这一点与护照? 特别是,如何从passportauthentication的会话中获得ouath实例,来做oauth.get(…),如下所述: https : //github.com/ciaranj/node-oauth

更新:Jared(作者passportjs)已经解释了这是在谷歌组线程下面的错误的做法,并build议使用https://github.com/mikeal/request

这是对我来说是如何工作的:

 var oauth = { consumer_key: process.env.BB_CONSUMER_KEY, consumer_secret: process.env.BB_CONSUMER_SECRET }; passport.use(new BitbucketStrategy({ ... function(token, tokenSecret, profile, done) { oauth = extend(oauth, { token: token, token_secret: tokenSecret }); } 

请注意,上面的令牌可能需要在群集环境中保持每个用户的持久性。

之后,要访问API,请执行以下操作:

 request.get({url: 'protected end point', oauth: oauth}) 

希望它会帮助别人!