Javascript Passport facebook策略抛出数据必须是使用Node.js的字符串
我正在使用Javascript Passport facebook策略抛出数据必须是使用Node.js的字符串,javascript,node.js,authentication,passport.js,passport-facebook,Javascript,Node.js,Authentication,Passport.js,Passport Facebook,我正在使用Node.js和passport-facebook策略将客户端登录到应用程序中 我遵循了passport文档,但仍然有一个错误:数据必须是字符串或缓冲区 Strategy可以很好地重定向到facebook页面,但在测试接受应用程序的条件并重定向到主页后,应用程序会抛出以下错误: StatusCodeError:500-{“错误”:“数据必须是字符串或缓冲区”} 这是我的代码,来自编写策略的auth.js。我正在使用jsonwebtoken模块对用户id进行签名 exports.face
Node.js
和passport-facebook策略
将客户端登录到应用程序中
我遵循了passport文档,但仍然有一个错误:数据必须是字符串或缓冲区
Strategy可以很好地重定向到facebook页面,但在测试接受应用程序的条件并重定向到主页后,应用程序会抛出以下错误:
StatusCodeError:500-{“错误”:“数据必须是字符串或缓冲区”}
这是我的代码,来自编写策略的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.\u json
更改为profile.\u raw
。但是,所有值均未定义
我正在使用Node6.10.0版本。和passport:“^0.3.2”
,“passport facebook”:“^2.1.1”
如何解决此错误?当创建密码加密的函数的参数为空时,此错误会发生。举例来说: const crypto=require('crypto') 设shasum=crypto.createHash('sha256')) shasum.update(password)//密码为空 此身份验证方法不需要密码。您必须编写条件代码以防止加密