Сервер авторизации запускается при установке корректного токена
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 понял! Придумаю, как реализовать :) Спасибо!