Поделиться через


OAuthPrompt class

Создает новый запрос, запрашивающий вход пользователя с помощью службы единого входа Bot Frameworks.

Extends

Комментарии

Запрос попытается получить текущий маркер пользователей, и если пользователь не вошел в систему, он отправит им OAuthCard с кнопкой, которую они могут нажать, чтобы войти. В зависимости от канала пользователь будет отправлен через один из двух возможных потоков входа:

  • Поток автоматического входа, когда пользователь войдет в систему и служба единого входа перенаправит бот маркера доступа пользователей с помощью действия event или invoke.
  • Поток "магического кода", в котором после входа пользователя в систему будет предложено службе единого входа отправить боту шестизначный код, подтверждающий их личность. Этот код будет отправлен как стандартное действие message.

Оба потока автоматически поддерживаются OAuthPrompt, и единственное, что необходимо будьте осторожны, заключается в том, что вы не блокируете event и invoke действия, которые может ожидать запрос.

Заметка

Следует избегать сохранения маркера доступа с помощью ботов другого состояния. Служба единого входа Bot Framework обеспечивает безопасное хранение маркера от вашего имени. Если вы храните его в состоянии ботов, срок его действия может истекает или отозван между поворотами.

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

Использование запроса

При использовании с ботами DialogSet можно просто добавить новый экземпляр запроса в виде именованного диалогового окна с помощью DialogSet.add(). Затем можно запустить запрос с каскадного шага с помощью DialogContext.beginDialog() или DialogContext.prompt(). Пользователю будет предложено выполнить вход по мере необходимости, и его маркер доступа будет передан в качестве аргумента вызывающим пользователям следующего каскадного шага:

const { ConversationState, MemoryStorage, OAuthLoginTimeoutMsValue } = require('botbuilder');
const { DialogSet, OAuthPrompt, WaterfallDialog } = require('botbuilder-dialogs');

const convoState = new ConversationState(new MemoryStorage());
const dialogState = convoState.createProperty('dialogState');
const dialogs = new DialogSet(dialogState);

dialogs.add(new OAuthPrompt('loginPrompt', {
   connectionName: 'GitConnection',
   title: 'Login To GitHub',
   timeout: OAuthLoginTimeoutMsValue   // User has 15 minutes to login
}));

dialogs.add(new WaterfallDialog('taskNeedingLogin', [
     async (step) => {
         return await step.beginDialog('loginPrompt');
     },
     async (step) => {
         const token = step.result;
         if (token) {

             // ... continue with task needing access token ...

         } else {
             await step.context.sendActivity(`Sorry... We couldn't log you in. Try again later.`);
             return await step.endDialog();
         }
     }
]));

Конструкторы

OAuthPrompt(string, OAuthPromptSettings, PromptValidator<TokenResponse>)

Создает новый экземпляр OAuthPrompt.

Свойства

id

Уникальный идентификатор диалогового окна. Задает уникальный идентификатор диалогового окна.

telemetryClient

Возвращает клиент телеметрии для этого диалогового окна. Задает клиент телеметрии для этого диалогового окна.

Унаследованные свойства

EndOfTurn

Возвращает результат конца по умолчанию.

Методы

beginDialog(DialogContext, PromptOptions)

Вызывается, когда диалоговое окно запроса отправляется в стек диалогов и активируется.

continueDialog(DialogContext)

Вызывается, когда диалоговое окно запроса является активным диалогом, и пользователь ответил на новое действие.

getUserToken(TurnContext, string)

Пытается получить сохраненный маркер для текущего пользователя.

recognizeToken(DialogContext)

Общая реализация функции RecognizeTokenAsync. Это предназначено для внутреннего использования для консолидации реализации OAuthPrompt и OAuthInput. Логика приложения должна использовать эти классы диалогов.

sendOAuthCard(OAuthPromptSettings, TurnContext, string | Partial<Activity>)

Отправляет карточку OAuth.

signOutUser(TurnContext)

Подписывает пользователя из службы.

Наследуемые методы

configure(Record<string, unknown>)

Метод Fluent для настройки объекта.

endDialog(TurnContext, DialogInstance, DialogReason)

При переопределении в производном классе выполняет очистку диалогового окна перед завершением.

getConverter(string)
getVersion()

Кодированная строка, используемая для обнаружения изменений бота при повторном развертывании.

onDialogEvent(DialogContext, DialogEvent)

Вызывается при возникновении события, используя DialogContext.emitEvent(), текущим диалогом или диалогом, запущенным текущим диалогом.

repromptDialog(TurnContext, DialogInstance)

При переопределении в производном классе переиздает пользователя для ввода.

resumeDialog(DialogContext, DialogReason, any)

При переопределении в производном классе возобновляет диалоговое окно после завершения диалогового окна над ним в стеке.

Сведения о конструкторе

OAuthPrompt(string, OAuthPromptSettings, PromptValidator<TokenResponse>)

Создает новый экземпляр OAuthPrompt.

new OAuthPrompt(dialogId: string, settings: OAuthPromptSettings, validator?: PromptValidator<TokenResponse>)

Параметры

dialogId

string

Уникальный идентификатор диалогового окна в родительском DialogSet или ComponentDialog.

settings
OAuthPromptSettings

Параметры, используемые для настройки запроса.

validator

PromptValidator<TokenResponse>

(Необязательно) проверяющий элемент, который будет вызываться каждый раз, когда пользователь отвечает на запрос.

Сведения о свойстве

id

Уникальный идентификатор диалогового окна. Задает уникальный идентификатор диалогового окна.

string id

Значение свойства

string

Идентификатор диалогового окна.

Комментарии

Это будет автоматически создано, если не указано.

telemetryClient

Возвращает клиент телеметрии для этого диалогового окна. Задает клиент телеметрии для этого диалогового окна.

BotTelemetryClient telemetryClient

Значение свойства

BotTelemetryClient

BotTelemetryClient для ведения журнала.

Сведения об унаследованном свойстве

EndOfTurn

Возвращает результат конца по умолчанию.

static EndOfTurn: DialogTurnResult

Значение свойства

Комментарии

Этот результат указывает, что диалоговое окно (или логический шаг в диалоговом окне) завершило обработку текущего шага, по-прежнему активно и ожидает дополнительных входных данных.

унаследован от диалогового окна.EndOfTurn

Сведения о методе

beginDialog(DialogContext, PromptOptions)

Вызывается, когда диалоговое окно запроса отправляется в стек диалогов и активируется.

function beginDialog(dc: DialogContext, options?: PromptOptions): Promise<DialogTurnResult>

Параметры

dc
DialogContext

DialogContext для текущей очереди беседы.

options
PromptOptions

Необязательный. PromptOptions, дополнительные сведения для передачи в запущенный запрос.

Возвращаемое значение

Promise<DialogTurnResult>

Promise, представляющий асинхронную операцию.

Комментарии

Если задача выполнена успешно, результат указывает, активен ли запрос после обработки поворота с помощью запроса.

continueDialog(DialogContext)

Вызывается, когда диалоговое окно запроса является активным диалогом, и пользователь ответил на новое действие.

function continueDialog(dc: DialogContext): Promise<DialogTurnResult>

Параметры

dc
DialogContext

DialogContext для текущей очереди беседы.

Возвращаемое значение

Promise<DialogTurnResult>

Promise, представляющий асинхронную операцию.

Комментарии

Если задача выполнена успешно, результат указывает, активен ли диалог после обработки в диалоговом окне. Обычно запрос продолжает получать ответы пользователя, пока он не принимает ответ пользователя в качестве допустимых входных данных для запроса.

getUserToken(TurnContext, string)

Пытается получить сохраненный маркер для текущего пользователя.

function getUserToken(context: TurnContext, code?: string): Promise<TokenResponse | undefined>

Параметры

context

TurnContext

Контекст ссылается на пользователя, который ищется.

code

string

(Необязательно) код входа, полученный от пользователя.

Возвращаемое значение

Promise<TokenResponse | undefined>

Ответ маркера.

recognizeToken(DialogContext)

Общая реализация функции RecognizeTokenAsync. Это предназначено для внутреннего использования для консолидации реализации OAuthPrompt и OAuthInput. Логика приложения должна использовать эти классы диалогов.

function recognizeToken(dc: DialogContext): Promise<PromptRecognizerResult<TokenResponse>>

Параметры

dc
DialogContext

DialogContext для текущей очереди беседы.

Возвращаемое значение

Promise<PromptRecognizerResult<TokenResponse>>

Обещание, разрешающее результат

sendOAuthCard(OAuthPromptSettings, TurnContext, string | Partial<Activity>)

Отправляет карточку OAuth.

static function sendOAuthCard(settings: OAuthPromptSettings, turnContext: TurnContext, prompt?: string | Partial<Activity>): Promise<void>

Параметры

settings
OAuthPromptSettings

Параметры OAuth.

turnContext

TurnContext

Переключение контекста.

prompt

string | Partial<Activity>

Действие сообщения.

Возвращаемое значение

Promise<void>

signOutUser(TurnContext)

Подписывает пользователя из службы.

function signOutUser(context: TurnContext): Promise<void>

Параметры

context

TurnContext

Контекст, ссылающийся на пользователя, который выполняется выход.

Возвращаемое значение

Promise<void>

Обещание, представляющее асинхронную операцию.

Комментарии

В этом примере показано создание экземпляра запроса и выход пользователя.

const prompt = new OAuthPrompt({
   connectionName: 'GitConnection',
   title: 'Login To GitHub'
});
await prompt.signOutUser(context);

Сведения о наследуемом методе

configure(Record<string, unknown>)

Метод Fluent для настройки объекта.

function configure(config: Record<string, unknown>): this

Параметры

config

Record<string, unknown>

Параметры конфигурации для применения.

Возвращаемое значение

this

После завершения операции настраиваемый.

наследуется отConfigurable.configure

endDialog(TurnContext, DialogInstance, DialogReason)

При переопределении в производном классе выполняет очистку диалогового окна перед завершением.

function endDialog(_context: TurnContext, _instance: DialogInstance, _reason: DialogReason): Promise<void>

Параметры

_context

TurnContext

Объект контекста для поворота.

_instance
DialogInstance

Текущие сведения о состоянии для этого диалогового окна.

_reason
DialogReason

Причина окончания диалогового окна.

Возвращаемое значение

Promise<void>

Комментарии

Производные диалоги, которые должны выполнять ведение журнала или очистку перед завершением, должны переопределить этот метод. По умолчанию этот метод не действует.

DialogContext вызывает этот метод при завершении текущего диалога.

См. также

унаследован отDialog.endDialog

getConverter(string)

function getConverter(_property: string): Converter | ConverterFactory

Параметры

_property

string

Ключ конфигурации условного селектора.

Возвращаемое значение

Преобразователь конфигурации селектора.

унаследован отConfigurable.getConverter

getVersion()

Кодированная строка, используемая для обнаружения изменений бота при повторном развертывании.

function getVersion(): string

Возвращаемое значение

string

Уникальная строка, которая должна изменяться только при изменении диалогового окна таким образом, чтобы перезапустить диалоговое окно.

Комментарии

По умолчанию возвращается диалоговое окно идентификатор, но его можно переопределить, чтобы обеспечить более точную логику обнаружения изменений. Любое диалоговое окно в стеке с изменением версии приведет к возникновению события versionChanged. Если это событие не обрабатывается ботом, возникает ошибка, в результате чего выполняется логика обработчика ошибок ботов.

Возврат пустой строки отключит отслеживание версий для компонента вместе.

унаследовано отDialog.getVersion

onDialogEvent(DialogContext, DialogEvent)

Вызывается при возникновении события, используя DialogContext.emitEvent(), текущим диалогом или диалогом, запущенным текущим диалогом.

function onDialogEvent(dc: DialogContext, e: DialogEvent): Promise<boolean>

Параметры

dc
DialogContext

Контекст диалогового окна для текущей очереди беседы.

e
DialogEvent

Возникает событие.

Возвращаемое значение

Promise<boolean>

Значение True, если событие обрабатывается текущим диалогом, а пузырьк должен остановиться.

наследуется от диалогового окна.onDialogEvent

repromptDialog(TurnContext, DialogInstance)

При переопределении в производном классе переиздает пользователя для ввода.

function repromptDialog(_context: TurnContext, _instance: DialogInstance): Promise<void>

Параметры

_context

TurnContext

Объект контекста для поворота.

_instance
DialogInstance

Текущие сведения о состоянии для этого диалогового окна.

Возвращаемое значение

Promise<void>

Комментарии

Производные диалоги, поддерживающие проверку и логику повторного запроса, должны переопределить этот метод. По умолчанию этот метод не действует.

DialogContext вызывает этот метод, когда текущее диалоговое окно должно повторно запрашивать входные данные от пользователя. Этот метод реализуется для диалоговых окон запроса.

См. также

унаследован отDialog.repromptDialog

resumeDialog(DialogContext, DialogReason, any)

При переопределении в производном классе возобновляет диалоговое окно после завершения диалогового окна над ним в стеке.

function resumeDialog(dc: DialogContext, reason: DialogReason, result?: any): Promise<DialogTurnResult>

Параметры

dc
DialogContext

Контекст текущего диалогового окна.

reason
DialogReason

Причина возобновления диалога. Обычно это будет DialogReason.endCalled

result

any

Необязательный. Возвращаемое значение, если таковое имеется, из диалогового окна, завершившегося.

Возвращаемое значение

Promise<DialogTurnResult>

Обещание разрешения результата поворота диалогового окна.

Комментарии

Производные диалоги, поддерживающие несколько поворотов бесед, должны переопределить этот метод. По умолчанию этот метод сигнализирует о том, что диалоговое окно завершено и возвращается.

DialogContext вызывает этот метод при возобновлении диалога. Если предыдущее диалоговое окно в стеке вернуло значение, это значение находится в параметре result.

Чтобы запустить диалоговое окно дочерних, используйте DialogContext.beginDialog или DialogContext.prompt; Однако это диалоговое окно не обязательно будет тем, который запустил дочерний диалог. Чтобы сообщить контексту диалогового окна о завершении этого диалогового окна, дождитесь DialogContext.endDialog перед выходом из этого метода.

См. также

унаследовано отDialog.resumeDialog