首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用twitter oAuth和Passport.js登录

使用twitter oAuth和Passport.js登录
EN

Stack Overflow用户
提问于 2014-02-09 16:35:24
回答 1查看 1.5K关注 0票数 2

我正在用node.js构建一个允许使用twitter帐户登录的应用程序。

我第一次运行这段代码时,wit成功了,但几天后,它只是返回了一些错误。

我试图更改我的twitter应用程序配置,但它不起作用。

app.js:

代码语言:javascript
复制
var express = require('express')
  , io
  , _appS = require('./appServer')
  , passport = require('passport')
  , TwitterStrategy = require('passport-twitter').Strategy
  ;

var app = express()
  , PORT = 7777
  ;


passport.serializeUser(function ( user, done ) {
    done( null, user );
});

passport.deserializeUser(function ( obj, done ) {
    done( null, obj );
});

passport.use(new TwitterStrategy ({
        consumerKey : "consumer",
        consumerSecret : "secret",
        callbackURL : "http://127.0.0.1:7777/auth/twitter/callback"
    },
    function ( token, tokenSecret, profile, done ) {

        process.nextTick (function () {
            return done ( null, profile );
        });
    }
));

app.configure(function () {
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');

    app.use(express.static(__dirname + '/static'));
    app.use(express.logger());
    app.use(express.cookieParser());
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.session({secret : 'argentina campeon'}));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(app.router);

    app.engine('jade', require('jade').__express);
});

io = require('socket.io').listen(app.listen(PORT));

/**
 * ROUTES
 */

app.get(
    "/", 
    function ( req, res ) {
    if ( req.user ) {
        //hay usuario
        io.sockets.on('connection', function ( socket ) {
            _appS.init( req.user.id, socket );
        });

    }
        else
            res.redirect('/login');
    }
);

app.get(
    "/login", 
    function ( req, res ) {
        if ( ! req.user )
            res.render("login");
        else
            res.redirect('/');
    }
);

app.get(
    "/auth/twitter", 
    passport.authenticate('twitter'),
    function ( req, res ) { }
);

app.get(
    "/auth/twitter/callback", 
    passport.authenticate('twitter', { failureRedirect : '/login' }),
    function ( req, res ) {
        console.log( req.user );
        res.redirect('/');
    }
);

app.get(
    "/logout", 
    function ( req, res ) {
        req.logout();
        res.redirect('/');
    }
);

当我尝试登录时,它会将我重定向到twitter以验证应用程序的权限,但它说:

我们正在将您重定向到应用程序。这可能需要几分钟。

所以,如果我等几秒钟,就会出现一个新的链接:

如果您的浏览器没有重定向,请单击此处

因此,当我单击它时,它现在将我重定向到我的应用程序,但是现在我得到了一个错误:

代码语言:javascript
复制
Error: Failed to find request token in session at Strategy.OAuthStrategy.authenticate (C:\Program Files\nodejs\node_modules\passport-twitter\node_modules\passport-oauth1\lib\strategy.js:142:54) at Strategy.authenticate (C:\Program Files\nodejs\node_modules\passport-twitter\lib\strategy.js:85:40) at attempt (C:\Program Files\nodejs\node_modules\passport\lib\middleware\authenticate.js:337:16) at authenticate (C:\Program Files\nodejs\node_modules\passport\lib\middleware\authenticate.js:338:7) at callbacks (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:164:37) at param (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:138:11) at pass (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:145:5) at Router._dispatch (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:173:5) at Object.router (C:\Program Files\nodejs\node_modules\express\lib\router\index.js:33:10) at next (C:\Program Files\nodejs\node_modules\express\node_modules\connect\lib\proto.js:193:15)

有趣的是,在我的控制台中,我可以在登录后看到Twitter上的所有用户数据,因为在我的代码中,我把if ( req.user ) console.log( req.user );放在了

  • 我使用的是最新版本的node.js及其软件包(快递、护照、推特护照、socket.io)。
  • 我用的是windows 7

那么,我能做些什么来修复它呢?

EN

回答 1

Stack Overflow用户

发布于 2014-02-09 16:49:51

如果这确实是您的代码,而不是您在这里发布之前替代的东西,那么您将告诉Twitter或客户端(我忘记了)调用自己,而不是您的登录后GET呼叫:

代码语言:javascript
复制
callbackURL : "http://127.0.0.1:7777/auth/twitter/callback"
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21661756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档