oauth-2.0 - @feathersjs/authentication-oauth2 不创建 JWT 和用户
问题描述
我无法使用 OAuth2 Facebook 策略对 FeathersJS 服务器进行身份验证,因为在 Facebook 授予对用户个人资料的访问权限后,feathers-authentication-oauth2 插件不会将用户创建到数据库中,也不会创建所需的 JWT 令牌以进行身份验证在客户端应用程序中调用 feathersclient.authenticate() 时。
我试图按照我找到的所有解释如何做的文件,但作为一个很好的例子,我可以选择这个(https://blog.feathersjs.com/how-to-setup-oauth-flow- with-featherjs-522bdecb10a8 ) 这很好解释。
作为起点,我在文档(https://docs.feathersjs.com/guides/chat/readme.html)中解释的羽毛聊天应用程序正常工作后,我已经添加了 OAuth2 部分解释在中文档中。在 default.json 文件中,我添加了“facebook”身份验证策略:
"facebook": {
"clientID": "MY_CLIENT_ID",
"clientSecret": "MY_CLIENT_SECRET"
}
在 authentication.js 文件中,我添加了 Facebook OAuth2 身份验证的配置:
const authentication = require('@feathersjs/authentication');
const jwt = require('@feathersjs/authentication-jwt');
const oauth2 = require('@feathersjs/authentication-oauth2');
const FacebookStrategy = require('passport-facebook').Strategy;
module.exports = function (app) {
const config = app.get('authentication');
// Set up authentication with the secret
app.configure(authentication(config));
app.configure(jwt());
app.configure(oauth2({
name: 'facebook',
Strategy: FacebookStrategy,
callbackURL: '/',
scope: ['public_profile', 'email'],
}));
...
最后,在 src/app.js 文件中,我添加了一个新的“Facebook 登录”按钮,它只是将 window.location 更改为 '/auth/facebook',这样 OAuth2 Facebook 流程就可以开始了。
按下“Facebook 登录”后,我希望在 NeDB DB 中创建用户并存储有效的 JWT,以便 feathersclient.authenticate() 调用不会失败。但不是那样,而是正确调用了 Facebook 登录页面,然后浏览器返回到主页 ('/'),但之后,当重新加载主页并调用 feathersclient.authenticate() 时,服务器抱怨没有任何有效的 JWT 令牌,因此身份验证失败。我也看不到在 NeDB DB 中创建的用户,所以应该由 feathers-authentication-oauth2 插件完成的假定用户和 JWT 创建不是......
解决方案
我终于让它工作了......我错误地配置了 Facebook 身份验证策略,我将其更改为:
app.configure(oauth2({
name: 'facebook',
successRedirect: '/',
failureRedirect: '/',
Strategy: FacebookStrategy
}));
现在它正在工作。
推荐阅读
- java - 如何解决 Android Studio 中原始文件夹的问题?
- python - 为什么我无法从 PowerBI 网页中读取 python 中带有 selenium 的 xpath
- node.js - Angular Universal如何找到导致错误TypeError的人:无法读取未定义的属性“长度”
- hazelcast - 在 Hazelcast 中更改实时 IMap 的分区键(分区迁移)
- php - SSE vs WebSockets vs 没有
- python - 将某些内容从 RSS 保存到 txt 文件时出现问题
- python - NoReverseMatch / Django / 网络博客
- java - 我想动态地从其他类中获得一些价值,例如:
- java - Sublime text 问题(javac: invalid flag:)
- terraform - terraform 模块如何根据调用者传递的参数(变量)返回不同的值