feathersjs - 如何使用 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如果有人找到解决方案的话。
解决方案
这可以通过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);
});
}
});
}
));
推荐阅读
- android - ViewPager 问题
- flutter - 全局删除 Flutter 应用中的所有阴影?
- python - 对遇到的连续状态使用 if 条件
- css - 为什么将标记行作为注释时出现css错误
- confluent-platform - 为什么 Confluent Schema Registry 将默认兼容性类型设置为 BACKWARD?
- angular - 错误 NullInjectorError: R3InjectorError(n)[_0 -> _0 -> _0]: NullInjectorError: No provider for _0! --- 使用 Angular MatDialog 时
- r - 将 Excel 格式的数据从 URL 抓取到 R 中
- powershell - 我在使用 Powershell 向控制台写入文本时遇到问题
- c# - GCP 的 Windows 服务
- c# - C# Console.ReadLine 每次按键都会创建新行