如何在 NodeJS 中获取 Instagram 用户名和访问令牌
Posted
技术标签:
【中文标题】如何在 NodeJS 中获取 Instagram 用户名和访问令牌【英文标题】:How to get the Instagram username and accesstoken in NodeJS 【发布时间】:2014-07-15 10:23:42 【问题描述】:我正在使用 Instagram 护照登录我的应用程序。用户登录后如何获取用户名和访问令牌?我无法访问中间件部分的“配置文件”。
//serialize user in the session
passport.serializeUser(function (user, done)
done(null, user);
);
//deserialize user in the session
passport.deserializeUser(function (id, done)
User.findById(id, function (err, user)
done(err, user);
);
);
//callback after successfull login of instagram
exports.callback = function (req, res)
// Successful authentication, redirect home.
console.log('calling');
var code = req.query.code;
//console.log('accessToken:' + accessToken);
console.log(req.session)
getOption(code, function (option)
//console.log('option from getOption callback ' + util.inspect(option, false, null));
request(option, function (error, response, body)
console.log('response inside request: ' + util.inspect(body, false, null));
fs.writeFile("test", JSON.stringify(error), function (err)
if (err)
console.log(err);
else
console.log("The file was saved!");
);
res.writeHead(200,
'Content-Type': 'text/json'
);
//res.end(response);
);
);
// Successful authentication, redirect home
//function to get the option for the first parameter in the request function
function getOption(code, callback)
console.log('code from getOption ' + code)
var options =
url: 'https://api.instagram.com/oauth/access_token',
headers:
'client_id': 'client-id',
'client_secret': 'client-secret`enter code here`',
'grant_type': 'authorization_code',
'redirect_uri': '/instagramcallback',
'code': code
;
callback(options);
//middleware
passport.use(new InstagramStrategy(
clientID: 'my client-id',
clientSecret: 'my client secret',
callbackURL: "/instagramcallback"
,
function (accessToken, refreshToken, profile, done)
// asynchronous verification, for effect...
global.accessToken=accessToken;
// To keep the example simple, the user's Instagram profile is returned to
// represent the logged-in user. In a typical application, you would want
// to associate the Instagram account with a user record in your database,
// and return that user instead.
console.log('client profile:'+profile);
return done(null, profile);
));
【问题讨论】:
【参考方案1】:var express = require('express');
var api = require('instagram-node').instagram();
var app = express();
app.configure(function()
// The usual...
);
api.use(
client_id: YOUR_CLIENT_ID,
client_secret: YOUR_CLIENT_SECRET
);
var redirect_uri = 'http://yoursite.com/handleauth';
exports.authorize_user = function(req, res)
res.redirect(api.get_authorization_url(redirect_uri, scope: ['likes'], state: 'a state' ));
;
exports.handleauth = function(req, res)
api.authorize_user(req.query.code, redirect_uri, function(err, result)
if (err)
console.log(err.body);
res.send("Didn't work");
else
console.log('Yay! Access token is ' + result.access_token);
res.send('You made it!!');
);
;
// This is where you would initially send users to authorize
app.get('/authorize_user', exports.authorize_user);
// This is your redirect URI
app.get('/handleauth', exports.handleauth);
http.createServer(app).listen(app.get('port'), function()
console.log("Express server listening on port " + app.get('port'));
);
更多信息参考链接:https://www.npmjs.com/package/instagram-node
【讨论】:
有没有办法在弹出窗口中使用 instagram 登录而不是在新页面上重定向?以上是关于如何在 NodeJS 中获取 Instagram 用户名和访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
为啥不使用 NodeJS 中的 API 就无法获取所有 Instagram 帖子
如何在 Instagram 上的 chrome 移动视图中获取 .click(),而不是右键单击-[Instagram 上的 Selenium]