UsefulWeb/AmoCRM

Сервер авторизации запускается при установке корректного токена

Closed this issue · 4 comments

После установления рабочего токена запустился сервер авторизации. Юрий обещал приложить примеры кода. Начнём расследование :)

Небольшое уточнение: после установки токена и последующей попытки отправки запроса (!) запускается сервер авторизации, а запрос не совершается (ошибки в консоли нет, сервер не падает).


import CONFIG from './config.js';
import AmoToken from './models/AmoToken.js';

const isDev = process.env.NODE_ENV === 'development';

class Amocrm {
  _client = null;
  _token = null;

  constructor() {
    this._init();
  }

  get client() {
    return this._client;
  }

  async _init() {
    await this._readTokenFromDb();
    this._initClient();
    this._initToken();
    this._initHandlers();
  }

  async _initClient() {
    const domain = isDev ? CONFIG.DOMAIN.DEV : CONFIG.DOMAIN.PROD;
    const client_id = isDev ? CONFIG.CLIENT_ID.DEV : CONFIG.CLIENT_ID.PROD;
    const client_secret = isDev ? CONFIG.CLIENT_SECRET.DEV : CONFIG.CLIENT_SECRET.PROD;
    const redirect_uri = isDev ? CONFIG.REDIRECT_URI.DEV : CONFIG.REDIRECT_URI.PROD;
    const authPort = isDev ? CONFIG.AUTH_PORT.DEV : CONFIG.AUTH_PORT.PROD;
    let options = {
      domain,
      auth: {
        client_id,
        client_secret
      }
    };
    const additionalAuth = {
      redirect_uri,
      state: 'state',
      server: {
        port: authPort
      }
    };

    options.auth = { ...options.auth, ...additionalAuth };

    this._client = new AmoClient(options);
  }

  _initToken() {
    if (this._token) {
      this.client.token.setValue(this._token);
      return;
    }

    const authUrl = this.client.auth.getUrl();

    console.log(`Auth url: ${ authUrl }`);
    this.client.request.get('/api/v4/leads');
  }

  _initHandlers() {
    this.client.token.on('change', e => this._updateToken());
  }

  async _readTokenFromDb() {
    const curToken = await AmoToken.findOne({}, { '_id': false, '__v': false });
    this._token = curToken ? curToken : null;
  }

  async _writeTokenToDb() {
    const newToken = new AmoToken(this._token);
    await AmoToken.deleteMany({});
    await newToken.save();
  }

  async _updateToken() {
    this._token = this._client.token.getValue();
    await this._writeTokenToDb();
  }
}

export default new Amocrm();

Закрываю в связи с большими изменениями в версиях. Прошу открыть повторно, если будут ошибки

На самом деле вопрос был в другом - как проверить токен на валидность при запуске приложения. Потребность в этом к примеру может возникнуть при переходе с amocrm.ru на kommo.com, так как при переходе интеграцию нужно создавать по новой и ключи будут другие, поэтому и старый токен не подойдет. Самый простой вариант решения данной проблемы почистить старый токен вручную.

@YuriShvetsov понял! Придумаю, как реализовать :) Спасибо!