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)//密码为空

此身份验证方法不需要密码。您必须编写条件代码以防止加密