1

Ich benutze pass.js für die Twitter-Anmeldung in node.js. Aber es funktioniert nicht. Es bleibt für einige Zeit in Arbeit und kehrt dann ohne Fehler oder Erfolg zurück.Melden Sie sich bei Twitter mit pass.js in node.js nicht an

Mein Code:

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); 
    }); 
})); 
} 

Ich bin nicht immer "console.log ('Call');" Anruf.

Mein App.js-Code

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

Wenn es ein anderes Plugin für Twitter OAuth für NodeJS gibt, ist es willkommen. –

+0

Ich denke, Sie haben die Strategie richtig definiert, aber wie werden Sie es an die 'node.js' App anhängen. Versuchen Sie dieses Beispiel https://github.com/passport/express-4.x-twitter-example/blob/master/server.js –

+0

@MukeshSharma Immer noch hole ich das gleiche Problem. Ich teste in localhost, ist dieses Problem für localhost ?? –

Antwort

1

Sie haben nicht Reisepass in Ihrem app.js initialisiert. Sie müssen configurepassport, bevor Sie seine authentication strategies verwenden.

Außerdem müssen Sie initialize express-session Login-Sitzungen für Ihre Benutzer erstellen. Geben Sie diese Zeilen in Ihre app.js ein. Ingore, was auch immer Sie einige von ihnen haben. Aber, stellen Sie sicher, dass Sie die Bestellung aufrechterhalten.

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 

Stellen Sie sicher, dass Sie alle erforderlichen node modules importieren. Im Folgenden sind die für diese erforderlich. Fügen Sie die, die Sie bereits in Ihrem dont haben app.js

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

Bitte lesen Sie passport configure documentation für weitere Informationen.

Verwandte Themen