首页 > 解决方案 > 如何使用 Facebook 令牌进行身份验证?

问题描述

我正在发布到http://localhost:3030/authentication并尝试检索 JWT 并使用 Facebook oAuth 创建用户模型。我的客户端是 React 并与 API 分开。

我的身体:

{
    "strategy": "facebook",
    "accessToken": "EAALOM2rXQ50BAL5vERqa6YTJzyKZAeG4Yd9ZBPuqHfRmFzOpsQiTHEc1uS1sBaot7V9F7JlufpAWqqJoHIG8RCghLdBIKssKRyQqMLxiHvCPTjVDXqaR1rM4FhEXk55nFU0ZBZBP2KNVOoDNAGUBtJAOKaUdbeszLE0gXxgoF0DWgZBsRfVsZBFRBenQLMZBwZCDPIF606aHrA0CdDrcTRqSbcJWZCSlYIMwZD",
    "facebookId": "10155772119707013",
    "email": "joshn@hotmail.com.au"
}

但我收到一个 HTML 页面响应,上面写着“您尚未登录:您尚未登录。请登录并重试。”

同样的问题@ https://github.com/feathersjs/authentication-oauth2/issues/22如果有人找到解决方案的话。

标签: feathersjs

解决方案


这可以通过https://github.com/drudge/passport-facebook-token

我的解决方案(在 authentication.js 中)是扩展自定义 Passport 策略:

app.passport.use('facebook-token', new FacebookTokenStrategy({
        clientID: process.env.FACEBOOK_CLIENT_ID,
        clientSecret: process.env.FACEBOOK_CLIENT_SECRET
    }, function (accessToken, refreshToken, profile, done) {
        app.service('users').find({
            query: {
                facebookId: profile.id
            }
        }).then((userData) => {
            if (userData.data.length > 0) {
                return done(null, userData.data[0]);
            } else {
                app.service('users').create({}).then((data) => {
                    return done(null, data);
                });
            }
        });
    }
));

推荐阅读