1

node.js의 twitter 로그인에 passport.js를 사용하고 있습니다. 하지만 작동하지 않습니다. 그것은 언젠가 진행중인 채로 있고, 그 다음에 실수 나 성공없이 돌아옵니다.node.js의 passport.js를 사용하여 트위터로 로그인하지 못했습니다.

내 코드 :

module.exports.loginWithTwitter = function (req, res) { 

var passport = require('passport'); 
var Strategy = require('strategy'); 
var TwitterStrategy = require('passport-twitter').Strategy; 

// used to serialize the user for the session 
passport.serializeUser(function (user, done) { 
    done(null, user.id); 
}); 

// used to deserialize the user 
passport.deserializeUser(function (id, done) { 
    User.findById(id, function (err, user) { 
     done(err, user); 
    }); 
}); 

passport.use(new TwitterStrategy({ 
    consumerKey: "HMtGdCax3EMhUAikCi2uySwoQ", 
    consumerSecret: "QZlWEdjVbPkWPr7cfS6ohbZgNAkpiboRbP0HGaiv1AvTJRtATw", 
    callbackURL: "http://192.168.0.102:4000/api/userData/get" 
}, function (token, tokenSecret, profile, cb) { 
    console.log('call'); 
    process.nextTick(function() { 
     console.log(profile); 
    }); 
})); 
} 

내가 받고 있지 않다 "CONSOLE.LOG에게 ('전화');" 요구.

내 App.js 코드

var express = require('express'), 
    app = express(), 
    bodyParser = require('body-parser'), 
    mongoose = require('mongoose'), 
    http = require('http'), 
    cors = require('cors'); 


app.use(cors()); 

app.use(function(req, res, next) { 
    var allowedorigins = ['http://localhost:4000']; 
    var origin = req.headers.origin; 
    //if (allowedorigins.indexof(origin) > -1) { 
    // res.setheader('access-control-allow-origin', origin); 
    //} 
    res.header("access-control-allow-credentials", "true"); 
    res.header("access-control-allow-headers", "x-requested-with"); 
    res.header("access-control-allow-headers", "origin, x-requested-with, content-type, accept,application/x-www-form-urlencoded"); 

    next(); 
}); 

app.get('/', function(req, res) { 
    res.setHeader('Content-Type', 'application/json,application/x-www-form-urlencoded'); 
    res.send(JSON.stringify({ 
     Server: "A" 
    })); 
}); 

var passport = require('passport'); 
app.get('/auth/twitter', passport.authenticate('twitter')); 

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

mongoose.Promise = global.Promise; 
mongoose.connect('mongodb://localhost/Eviral'); // mongo DB Connection 

var server = app.listen(4000); 
var router = express.Router(); 
app.use(bodyParser.urlencoded({ 
    limit: '100mb', 
    extended: true 
})); // configure app to use bodyParser() this will let us get the data from a POST 
app.use(bodyParser.json({ 
    limit: '100mb' 
})); 


app.use(function(req, res, next) { 
    var _send = res.send; 
    var sent = false; 
    res.send = function(data) { 
     if (sent) return; 
     _send.bind(res)(data); 
     sent = true; 
    }; 
    next(); 
}); 

app.use(express.static(__dirname)); 
app.use(require('./routes/clientMSTRoute')); 
+0

NodeJS에 대한 트위터 oauth를위한 다른 플러그인이있는 경우 환영합니다. –

+0

나는 전략을 올바르게 정의했다고 생각하지만 어떻게 그것을 node.js 앱에 첨부 할 것인가? 이 예제를 실행하십시오. https://github.com/passport/express-4.x-twitter-example/blob/master/server.js –

+0

@MukeshSharma 여전히 동일한 문제를 가져옵니다. 나는 localhost에서 테스트하고 있는데, localhost에 대해이 문제가 무엇입니까 ?? –

답변

1

당신은 당신의 app.js에 여권을 초기화하지 않았습니다. authentication strategies을 사용하기 전에 configurepassport이 필요합니다.

또한 사용자의 로그인 세션을 만들려면 initialize express-session해야합니다.

이 줄을 app.js에 추가하십시오. 당신이 이미 그 중 일부를 가지고 있다면 무엇이든간에 Ingore. 그러나 주문을 유지해야합니다.

app.use(express.cookieParser()); 
app.use(express.bodyParser()); 
app.use(express.session({ secret: 'your_secret_keyword' })); 
//Below two lines are required to initialize passport 
app.use(passport.initialize()); 
app.use(passport.session());//this should come after express-session 
          //to ensure login session is restored in correct order 

필요한 모든 항목을 가져 왔는지 확인하십시오. node modules 아래는 이것들에 필요한 것입니다. app.js

var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var expressSession = require('express-session'); 
var passport = require('passport'); 

자세한 내용은 passport configure documentation를 읽어 보시기 바랍니다 당신에 당신이 이미 해달라고 사람들을 추가합니다.

관련 문제