护照facebook战略投掷数据必须是使用Node.js的string

我正在使用Node.jspassport facebook strategy来login客户端的应用程序。

我跟着护照文件,但仍然有一个错误: 数据必须是一个string或缓冲区

策略redirect到Facebook页面,但testing后接受应用程序的条件,它redirect到主页,应用程序抛出此错误:

StatusCodeError: 500 - {"error":"Data must be a string or a buffer"}

这是我写代码的auth.js代码。 我正在使用jsonwebtoken模块来签署用户ID。

 exports.facebookStrategy = new FacebookStrategy({ clientID: config.auth.facebook.clientID, clientSecret: config.auth.facebook.clientSecret, callbackURL: config.auth.facebook.callbackURL, profileFields: ['id', 'displayName', 'email'] }, function (accessToken, refreshToken, profile, done) { var userProfile = { username: profile._json.id, name: profile._json.name, email: profile._json.email, facebook: true } findOrCreate(userProfile, (err, user) => { if (err) { return done(err); } // use token lib to sign id jwt.sign({ userId: user.username }, config.secret, {}, (e, token) => { if (e) { return done(e); } user.token = token; return done(null, user); }) }); function findOrCreate (user, callback) { client.getUser(user.username, (err, usr) => { if (err) { return client.saveUser(user, callback); } callback(null, usr); }) } }); 

使用console.log我发现错误来自于这个代码块:

 ... findOrCreate(userProfile, (err, user) => { if (err) { console.log(err.message); // it returns 500 - {"error":"Data must be a string or a buffer"} return done(err); } 

我试图将profile._json更改为profile._raw 。 但是,所有值都是undefined

我正在使用Node 6.10.0版本。 和passport: "^0.3.2""passport-facebook": "^2.1.1"

我怎样才能解决这个错误?

此函数创build密码时encryption参数的错误ocurr为null。 举例来说:

const crypto = require('crypto')

let shasum = crypto.createHash('sha256')shasum.update(password)//密码为空

这种authentication方法不需要密码,你必须编码一个条件来防止encryption。