logologo
Начало
Руководство
Разработка
Плагины
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Начало
Руководство
Разработка
Плагины
API
logologo

Аутентификация пользователя

Обзор
Управление аутентификаторами

Типы аутентификации

Пароль
SMS

OIDC

Настройки

Примеры

Вход через Google
Вход через Microsoft

SAML

Настройки

Примеры

Вход через Google
LDAP
CAS
WeChat Work
DingTalk
Ключи API

Руководство для разработчиков

Расширение типов аутентификации
Справочник API

Верификация

Обзор

Типы верификации

SMS
Аутентификатор TOTP

Руководство для разработчиков

Расширение типов верификации
Расширение сценариев верификации
Расширение провайдеров SMS
Справочник API
Двухфакторная аутентификация (2FA)
Previous PageРасширение сценариев верификации
Next PageСправочник API
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#Расширение функциональности SMS-провайдера

В этой статье мы расскажем, как расширить функциональность SMS-провайдера в рамках функции Верификация: SMS с помощью плагина.

#Клиентская часть

#Регистрация формы конфигурации

При настройке SMS-верификатора, после выбора типа SMS-провайдера, появится форма конфигурации, связанная с этим типом. Эту форму конфигурации разработчик должен зарегистрировать на клиентской стороне.

import { Plugin, SchemaComponent } from '@nocobase/client';
import PluginVerificationClient from '@nocobase/plugin-verification/client';
import React from 'react';

const CustomSMSProviderSettingsForm: React.FC = () => {
  return <SchemaComponent schema={{
    type: 'void',
    properties: {
      accessKeyId: {
        title: `{{t("Идентификатор ключа доступа", { ns: "${NAMESPACE}" })}}`,
        type: 'string',
        'x-decorator': 'FormItem',
        'x-component': 'TextAreaWithGlobalScope',
        required: true,
      },
      accessKeySecret: {
        title: `{{t("Секретный ключ доступа", { ns: "${NAMESPACE}" })}}`,
        type: 'string',
        'x-decorator': 'FormItem',
        'x-component': 'TextAreaWithGlobalScope',
        'x-component-props': { password: true },
        required: true,
      },
    }
  }} />
}

class PluginCustomSMSProviderClient extends Plugin {
  async load() {
    const plugin = this.app.pm.get('verification') as PluginVerificationClient;
    plugin.smsOTPProviderManager.registerProvider('custom-sms-provider-name', {
      components: {
        AdminSettingsForm: CustomSMSProviderSettingsForm,
      },
    });
  }
}

#Серверная часть

#Реализация интерфейса отправки

Плагин верификации уже инкапсулировал процесс создания одноразовых паролей (OTP), поэтому разработчикам достаточно реализовать только логику отправки сообщений для взаимодействия с SMS-провайдером.

class CustomSMSProvider extends SMSProvider {
  constructor(options) {
    super(options);
    // options — это объект конфигурации с клиентской стороны
    const options = this.options;
    // ...
  }

  async send(phoneNumber: string, data: { code: string }) {
    // ...
  }
}

#Регистрация типа верификации

После реализации интерфейса отправки его необходимо зарегистрировать.

import { Plugin } from '@nocobase/server';
import PluginVerificationServer from '@nocobase/plugin-verification';
import { tval } from '@nocobase/utils';

class PluginCustomSMSProviderServer extends Plugin {
  async load() {
    const plugin = this.app.pm.get('verification') as PluginVerificationServer;
    // Имя должно соответствовать тому, что используется на клиентской стороне
    plugin.smsOTPProviderManager.registerProvider('custom-sms-provider-name', {
      title: tval('Пользовательский SMS-провайдер', { ns: namespace }),
      provider: CustomSMSProvider,
    });
  }
}