2017-08-10 37 views
3

您好我一直在試圖找到這個錯誤的解決方案爲2天,無果!我已經搜索了Stack Overflow。這些錯誤根本與我的無關。這是我收到的堆棧跟蹤。護照錯誤 - Strategy.ParseErrorResponse

Error 
    at Strategy.parseErrorResponse (/Users/jeremy/projects/thinkful_capstone_2/node_modules/passport-facebook/lib/strategy.js:196:12) 
    at Strategy.OAuth2Strategy._createOAuthError (/Users/jeremy/projects/thinkful_capstone_2/node_modules/passport-oauth2/lib/strategy.js:376:16) 
    at /Users/jeremy/projects/thinkful_capstone_2/node_modules/passport-oauth2/lib/strategy.js:166:45 
    at /Users/jeremy/projects/thinkful_capstone_2/node_modules/oauth/lib/oauth2.js:191:18 
    at passBackControl (/Users/jeremy/projects/thinkful_capstone_2/node_modules/oauth/lib/oauth2.js:132:9) 
    at IncomingMessage.<anonymous> (/Users/jeremy/projects/thinkful_capstone_2/node_modules/oauth/lib/oauth2.js:157:7) 
    at emitNone (events.js:91:20) 
    at IncomingMessage.emit (events.js:188:7) 
    at endReadableNT (_stream_readable.js:975:12) 
    at _combinedTickCallback (internal/process/next_tick.js:80:11) 
    at process._tickCallback (internal/process/next_tick.js:104:9) 

也在這裏是我的代碼:

const path = require('path'); 
// const Strategy = require('passport-facebook').Strategy; 
const bodyParser = require('body-parser'); 
const passport = require('passport'); 
// const { User } = require('../models/usermodel.js'); 
const express = require('express'); 
const cookieParser = require('cookie-parser'); 
const router = express.Router(); 
const app = express(); 

app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(cookieParser()); 
app.use(require('body-parser').urlencoded({ extended: true })); 
app.use(require('express-session')({ secret: 'keyboard cat', resave: true, saveUninitialized: true })); 


passport.serializeUser(function (user, done) { 
    done(null, user); 
}); 

passport.deserializeUser(function (user, done) { 
    done(null, user); 
}); 



router.get('/', passport.authenticate('facebook'), function (req, res) { 
    console.log(req.isAuthenticated()); 
    console.log(req.user); 
    res.sendFile(path.resolve('./public/adwall.html')); 
}); 


module.exports = router; 

任何幫助,將不勝感激!謝謝!

編輯:我也加入這一策略在我的服務器上的文件:

這裏是我使用在一個名爲不同的文件server.js Facebook的身份驗證策略:

passport.use(new Strategy({ 
    clientID: process.env.FACEBOOK_APP_ID, 
    clientSecret: process.env.FACEBOOK_SECRET, 
    callbackURL: 'http://localhost:8080/facebook/auth/cb' 
}, 
    function (accessToken, refreshToken, profile, cb) { 
     return cb(null, profile); 
    })); 

這裏鏈接到github項目: https://github.com/jeremytaylor7/wallaby-ads-project

+1

對不起,我忘了添加,只有當我添加passport.authenticate作爲中間件@路由器爲'/' – Jeremy

+0

時出現錯誤同樣的事情,如果我添加中間件到'/'我得到這個錯誤。 – guiomie

回答

0

你忘記了一件非常重要的事情。

當你passport.authenticate('facebook')...

它會尋找你沒有定義Facebook的策略。

http://passportjs.org/docs/facebook這裏看看配置新的策略。

var passport = require('passport') 
    , FacebookStrategy = require('passport-facebook').Strategy; 

passport.use(new FacebookStrategy({ 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: "http://www.example.com/auth/facebook/callback" 
    }, 
    function(accessToken, refreshToken, profile, done) { 
    User.findOrCreate(..., function(err, user) { 
     if (err) { return done(err); } 
     done(null, user); 
    }); 
    } 
)); 

而且也許有app.use(passport.initialize())app.use(passport.session())下面,你所定義的會話。

+0

謝謝您的支持!我忘了包括我已經將策略添加到另一個文件中,該文件是我的服務器文件server.js – Jeremy