после успешного перенаправления со страницы авторизации твиттер не может получить данные пользователя по паспорту. js - PullRequest
0 голосов
/ 07 января 2020

Я использую паспорт. js для твиттера. В моем веб-приложении после успешного входа в систему оно будет соответствующим образом заполнять твиты и отвечать на них в соответствии с учетными данными пользователя loggedIn. В настоящее время я могу успешно перенаправить после входа в систему, но не могу получить сведения о пользователе, которые паспорт дает после успешного входа, т.е. (имя пользователя, адрес электронной почты). В результате я не могу go дальше.

Ниже находится файл сервера узла. js файл. Пожалуйста, помогите мне с этим вопросом.

server.js
const express = require('express');
const TwitterStrategy = require('passport-twitter').Strategy;
const twitConfig = require('./config/auth').twitterAuth;
const passport = require('passport');
const path = require('path');
const bodyParser = require('body-parser');

// Create a new Express application.
const app = express();
// require('./routes/')(app);
// Use application-level middleware for common functionality, including
// logging, parsing, and session handling.
app.use(require('cookie-parser')());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true }));

//initialize passport strategy for twitter login.
passport.use(new TwitterStrategy({
    consumerKey: twitConfig.consumer_key,
    consumerSecret: twitConfig.consumer_secret,
    callbackURL: twitConfig.callbackURL
}, (token, tokenSecret, profile, callback) => {
        console.log('arguments in passport.use>>>>>>>>>>>>>>>', arguments);
        console.log('profile in twitterStrategy>>>>>>>>>>>>>', profile,callback);
        process.nextTick(() => {
            if (err) {
                console.log('err in passport TwitterStrategy>>>>>>>>>>>',err)
                return callback()
            } else {
                console.log('inside the else condition no error found>>>>>>>>>>',profile)
            }

        })
    return callback(null, profile);
}));

const twit = require('twit');
const T = new twit(twitConfig);

passport.serializeUser(function(user, callback) {
    console.log('arguments in serializeUser passport.use>>>>>>>>>>>>>>>', arguments);
    callback(null, user);
})

passport.deserializeUser(function (obj, callback) {
    console.log('arguments in deserializeUser passport.use>>>>>>>>>>>>>>>', arguments);
    callback(null, obj);
});

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

//load the routes 
app.use(require('./routes/twitterApi'));
app.use(require('./routes/token'));

app.use(passport.initialize());
app.use(passport.session());

app.get('/', function (req, res) {
    console.log('user in />>>>>>>>>>>>>>', req);
    res.render('index', {user: req.user})
})


app.get('/twitter/login', passport.authenticate('twitter'), (req, res) => {
    console.log('consoe.log req>>>>>>>>>>>>>', req);
    console.log('res >>>>>>>>>>',res);
});

app.get('/twitter/return', passport.authenticate('twitter', { failureRedirect: '/' }), function (req, res) {
    console.log('inside the return failure');
    res.redirect('http://localhost:8080/');
})

// listen for requests :)
const listener = app.listen(process.env.PORT || 9000, () => {
    console.log('Your app is listening on port ' + listener.address().port);
  });

1 Ответ

0 голосов
/ 07 января 2020

Вот пример асинхронного / ожидающего выполнения операции с базой данных для пользователя после аутентификации с использованием стратегии паспорта.

passport.use(new TwitterStrategy({
    consumerKey: twitConfig.consumer_key,
    consumerSecret: twitConfig.consumer_secret,
    callbackURL: twitConfig.callbackURL
}, async (token, tokenSecret, profile, callback) => {

try {
    // Perform some kind of db lookup/create with profile object
    const user = await User.findOne({
        where: {
            email: profile.email
        }
    })
    // now your user object will be passed to your callbackURL
    return callback(null, user) 
}
catch(error) {
    return callback(error, error.message);
}
...