gpt4 book ai didi

node.js - 如何在node.js Passport 中通过twitter登录后使用访问 token 对用户进行身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 22:02:10 25 4
gpt4 key购买 nike

我需要在我的node.js应用程序上构建基于 token 的身份验证,用户可以使用他的facebook或twitter凭据登录我的应用程序,并使用访问 token 来访问资源。 this post建议一旦通过 facebook 或 twitter 或其他方式进行身份验证,就在每个请求上使用访问 token ,并且根本不需要 session 例如

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

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

所以下面的代码,是通过twitter授权用户,如果我的应用程序没有找到我的用户信息,则将用户信息存储到数据库中。

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.如何向客户端发送以下请求的访问 token

在代码中,从twitter进行身份验证后,我获取访问 token 并将此 token 发送到浏览器上的客户端,因为 token 嵌入在url参数中,所以我尝试了代码res.redirect('/users/profile ? token = blabla '),但在客户端浏览器中,url 仍然显示为 '/users/profile' 而不是 '/users/profile ? token =blabla'

2. 一旦从 Twitter 进行了身份验证,以下带有 token 的请求将在本地通过我的应用程序(我将 token 存储在数据库中,并比较以下 token 进行验证)或仍然到 Twitter API进行身份验证?

如果在第一种情况下,那么我应该将 token 存储到数据库中,以便在对我的应用程序的以下请求中比较 token 中的以下请求?是这样吗

最佳答案

我也在努力得到这个,并且刚刚发现了这个相当相关的答案:Call Bitbucket REST API using 2leg oauth token

我只是不知道如何使用 Passport 执行此操作?特别是,如何从 Passport 身份验证 session 获取 ouath 实例,执行 oauth.get(...),如下所述:https://github.com/ciaranj/node-oauth

更新:Jared(passportjs 的作者)在下面的 Google 群组帖子中解释了这是错误的方法,并建议使用 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
});
}

请注意,上述 token 可能需要在集群环境中为每个用户保留。

稍后,要访问 api,请执行以下操作:

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

希望它能帮助别人!

关于node.js - 如何在node.js Passport 中通过twitter登录后使用访问 token 对用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19153269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com