Feathers客户端(@ feathers / client)无法在ReactJs应用程序中验证用户名/密码

时间:2019-09-02 21:31:33

标签: reactjs feathersjs feathers-authentication

根据Featherjs Client Authentication docs,我已经在我的React App中设置并初始化了该模块。之后,点击Login按钮,我以正确的数据格式调用推荐的app.authenticate(data)方法。这会导致客户端软件包中Uncaught TypeError: Cannot read property 'create' of undefined文件中的feathers.js立即出现错误。

如果您能指出正确的方向,这将非常有帮助。

为此应用程序

  1. 我目前正在开发服务器上。
  2. ReactJs应用位于localhost:3000上
  3. 位于localhost:3030上的FeathersJs应用程序。
  4. React应用由CRA引导,而Feathers服务器由CLI生成。
  5. 在React应用中,我正在使用npm的@feathersjs/client包。

我已经尝试通过终端中的curl请求服务器,并且以正确的凭据响应。之后,我通过React应用程序发出了AJAX请求,该请求也有效。如果我使用AJAX请求进行身份验证,则可以成功获取用户的tokenid

实际上,我可以继续进行下去。但是会出现问题,需要使用相同的令牌对用户进行重新身份验证并注销用户。我确实知道有解决方法。但是我想使用FeathersJs客户端,因为它提供了随时可以使用的reAuthenticatelogout方法。

启动羽毛客户端

import feathers from '@feathersjs/client';

const client = feathers();

client.configure(feathers.authentication({
  storage: window.localStorage
}));

export default client;
App.js中的

login函数称为

login = () => {
      const self = this;
      client.authenticate({
        strategy: 'local',
        email: 'hello@robin.com',
        password: 'supersecret'
      })
      .then(data => {
        console.log(data);
        self.setState({
          isAuthenticated: true
        });
        return data;
      })
      .catch(err => {
        console.log(err);
        self.setState({
          isAuthenticated: false
        });
      });
    };

调用该函数时,将引发以下错误:

在开发控制台中

Uncaught TypeError: Cannot read property 'create' of undefined
    at AuthenticationClient.authenticate (feathers.js:2838)
    at Object.App.login (App.js:50)
    at onClick (Login.js:8)

在运行ReactJs应用程序的浏览器中,显示以下错误:

TypeError: Cannot read property 'create' of undefined
AuthenticationClient.authenticate
node_modules/@feathersjs/client/dist/feathers.js:2838

> 2838 | var promise = this.service.create(authentication).then(function (authResult) {


我在做错什么,如何利用FeathersJs客户?

1 个答案:

答案 0 :(得分:1)

您忘记初始化RESTSocket.io客户端连接,如React Native API所示。应该是

import io from 'socket.io-client';
import feathers from '@feathersjs/feathers';
import socketio from '@feathersjs/socketio-client';

const socket = io('http://api.my-feathers-server.com', {
  transports: ['websocket'],
  forceNew: true
});
const client = feathers();

client.configure(socketio(socket));
client.configure(feathers.authentication({
  storage: window.localStorage
}));

export default client;