2016-12-24 17 views
1

node.jsのtwitterログインにpassport.jsを使用していますしかし、それは動作していません。いつかは進行中ですが、エラーや成功なしに復帰します。node.jsのpassport.jsを使用してTwitterでログインしていない

マイコード:

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のtwitter 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をお読みください。

関連する問題