0

Facebookへのログインに失敗したFacebook戦略に問題があります。私はPassport LocalとPassport Facebookを使用していますが、お互いに独立して、私が共有しているコードはここにあります。ノードを使用したPassport JSとのFacebook認証に失敗しました

このコードに間違いがありますか?また、ローカル戦略のために、私は完全に正常に動作しているビットを変更しました。

// config/passport.js 

// load all the things we need 
var LocalStrategy = require('passport-local').Strategy; 

// load up the user model 
var mysql = require('mysql'); 
var bcrypt = require('bcrypt-nodejs'); 
var dbconfig = require('./database'); 
var connection = mysql.createConnection(dbconfig.connection); 

connection.query('USE ' + dbconfig.database); 
// expose this function to our app using module.exports 
module.exports = function(passport) { 

// ========================================================================= 
// passport session setup ================================================== 
// ========================================================================= 
// required for persistent login sessions 
// passport needs ability to serialize and unserialize users out of session 

// 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) { 
    connection.query("SELECT * FROM users WHERE id = ? ",[id], function(err, rows){ 
     done(err, rows[0]); 
    }); 
}); 

// ========================================================================= 
// LOCAL SIGNUP ============================================================ 
// ========================================================================= 
// we are using named strategies since we have one for login and one for signup 
// by default, if there was no name, it would just be called 'local' 

passport.use(
    'local-signup', 
    new LocalStrategy({ 
     // by default, local strategy uses username and password, we will override with email 
     usernameField : 'username', 
     passwordField : 'password', 
     passReqToCallback : true // allows us to pass back the entire request to the callback 
    }, 
    function(req, username, password, done) { 
     // find a user whose email is the same as the forms email 
     // we are checking to see if the user trying to login already exists 
     connection.query("SELECT * FROM users WHERE username = ?",[username], function(err, rows) { 
      if (err) 
       return done(err); 
      if (rows.length) { 
       return done(null, false, req.flash('signupMessage', 'That username is already taken.')); 
      } else { 
       // if there is no user with that username 
       // create the user 
       console.log(req.body); 
       var newUserMysql = { 
        uname: req.body.uname, 
        username: username, 
        userphone: req.body.userphone, 
        password: bcrypt.hashSync(password, null, null) // use the generateHash function in our user model 
       }; 

       var insertQuery = "INSERT INTO users (uname, username, password, userphone) values (?,?,?,?)"; 
       console.log(insertQuery); 
       connection.query(insertQuery,[newUserMysql.uname, newUserMysql.username, newUserMysql.password, newUserMysql.userphone],function(err, rows) { 
        newUserMysql.id = rows.insertId; 

        return done(null, newUserMysql); 
       }); 
      } 
     }); 
    }) 
); 

// ========================================================================= 
// LOCAL LOGIN ============================================================= 
// ========================================================================= 
// we are using named strategies since we have one for login and one for signup 
// by default, if there was no name, it would just be called 'local' 

passport.use(
    'local-login', 
    new LocalStrategy({ 
     // by default, local strategy uses username and password, we will override with email 
     usernameField : 'username', 
     passwordField : 'password', 
     passReqToCallback : true // allows us to pass back the entire request to the callback 
    }, 
    function(req, username, password, done) { // callback with email and password from our form 
     connection.query("SELECT * FROM users WHERE username = ?",[username], function(err, rows){ 
      if (err) 
       return done(err); 
      if (!rows.length) { 
       return done(null, false, req.flash('loginMessage', 'No user found.')); // req.flash is the way to set flashdata using connect-flash 
      } 

      // if the user is found but the password is wrong 
      if (!bcrypt.compareSync(password, rows[0].password)) 
       return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); // create the loginMessage and save it to session as flashdata 

      // all is well, return successful user 
      return done(null, rows[0]); 
     }); 
    }) 
); 
}; 

コンソールログ: enter image description here

答えて

1

あなたはセッションで認可Facebookのユーザーを格納しませんでした。 FacebookStrategyの実装では、パラメータなしで関数done()を呼び出すだけです。まず、データベースにfb userを格納するか、存在する場合に関数を呼び出すかを選択する必要があります(最初のparamをエラーとして、2番目をユーザーオブジェクトとして受け取ります)。 here's docs

+0

おかげでトンティロフ。 –

関連する問題