Неверный логин с авторизацией Feathers

#feathersjs

#feathersjs

Вопрос:

Я пытаюсь использовать локальную аутентификацию, но получаю сообщение об ошибке «Неверный логин».

  1. Я отправляю «локальную» аутентификацию от клиента. Полученные данные на сервере
 { strategy: 'local',
      email: 'email@gmail.com',
      password: '123' },
    { query: {},
      provider: 'socketio',
      headers: {},
      session: {},
      cookies: {} }
  

В authentication.js

 module.exports = function (app) {
  const config = app.get('authentication');

  // Set up authentication with the secret
  app.configure(authentication(config));
  app.configure(jwt());
  app.configure(local());

  app.configure(oauth2(Object.assign({
    name: 'auth0',
    Strategy: Auth0Strategy
  }, config.auth0)));

  app.service('authentication').hooks({
    before: {
      create: [
        (data)=>{console.log('auth',data.arguments)},
        authentication.hooks.authenticate(config.strategies),
      ],
      remove: [
        authentication.hooks.authenticate('jwt')
      ]
    }
  });
};
  
  1. Сервер находит запись в базе данных и возвращает результат запроса
 { id: 1,
         email: 'email@gmail.com',
         password:
          '$2a$13$t2XZsqu/0t5jKSdbRUyZTOVOoZJVtiha3sN/Z8N0O190Z0DUJj70O',
         auth0Id: null,
         isVerified: null,
         verifyToken: 'string',
         verifyExpires: null,
         resetToken: 'string',
         resetExpires: null,
         createdAt: 2019-04-14T22:04:52.000Z,
         updatedAt: 2019-04-14T22:04:52.000Z }
  
  1. После этого он пытается сравнить hahs паролей, но хэш полученного пароля не равен паролю в результате запроса. Полученный пароль объединяется с текущим временем в хэше результата.

Как использовать локальную аутентификацию в feathers?

UPD

конфигурации из default.json

 "authentication": {
    "secret": "my secret key here",
    "strategies": [
      "jwt",
      "local"
    ],
    "path": "/authentication",
    "service": "users",
    "jwt": {
      "header": {
        "typ": "access"
      },
      "audience": "https://yourdomain.com",
      "subject": "anonymous",
      "issuer": "feathers",
      "algorithm": "HS256",
      "expiresIn": "1d"
    },
    "local": {
      "entity": "user",
      "usernameField": "email",
      "passwordField": "password"
    },
    "auth0": {
      "clientID": "your auth0 client id",
      "clientSecret": "your auth0 client secret",
      "successRedirect": "/",
      "domain": "mydomain.auth0.com",
      "scopes": [
        "profile"
      ]
    }
  }
  

Комментарии:

1. Просто или ради любопытства, почему вы отправляете стратегию аутентификации так, как local будто пытаетесь пройти аутентификацию с помощью OAuth ?

2. Я думаю, если я использую app.configure(local()); Я добавляю локальный метод аутентификации.

3. Если local не добавлен, я получаю неверный запрос: стратегия аутентификации «local» не зарегистрирована

4. вы пробовали стратегию OAuth?

5. Когда вы говорите «Полученный пароль объединяется с текущим временем в хэше результата», означает ли это, что вы используете перехват для изменения способа хэширования пароля? Локальная стратегия использует bcrypt для хэширования и сравнения предоставленного пароля. Если вы меняете способ хэширования пароля, это причина, по которой вы получаете ошибку.

Ответ №1:

На самом деле bcrypt (используемый feathers внутренне для хеширования) использует соли для хеширования наших паролей, поэтому вы каждый раз получаете разные результаты для одной и той же строки.