@ feathersjs / authentication-oauth2未创建JWT和用户

时间:2019-07-13 15:40:27

标签: oauth-2.0 feathersjs feathers-authentication

我无法使用Facebook的OAuth2策略对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)中说明的Feathers聊天应用程序,我添加了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数据库中创建用户并存储有效的JWT,以使feathersclient.authenticate()调用不会失败。 但是,与其相反,是正确调用Facebook登录页面,然后将浏览器返回到主页('/'),但是之后,当重新加载主页并调用feathersclient.authenticate()时,服务器抱怨没有有效的JWT令牌,因此身份验证失败。我也看不到在NeDB数据库中创建的用户,因此应该由feathers-authentication-oauth2插件完成的假定用户和JWT创建不是...

1 个答案:

答案 0 :(得分:0)

我终于使它起作用了……我错误地配置了Facebook身份验证策略,我将其更改为:

app.configure(oauth2({
    name: 'facebook',
    successRedirect: '/',
    failureRedirect: '/',
    Strategy: FacebookStrategy
  }));

现在可以正常工作了。