Как обработать пользовательскую отмену для запроса OAUTH2 в расширении обмена сообщениями Teams - PullRequest
0 голосов
/ 10 июля 2020

Ответ об отмене от token.botframework.com в настоящее время отображается на экране следующим образом:

{
  "error": {
    "code": "ServiceError",
    "message": "Missing required query string parameter: code. Url = https://token.botframework.com/.auth/web/redirect?state=d48fb60ae4834fd8adabfe054a5eff74&error_description=The+user+chose+not+to+give+your+app+access+to+their+Dropbox+account.&error=access_denied"
  }
}

Как я могу вместо этого аккуратно обработать отмену? Если пользователь отменяет подобное, я бы хотел, чтобы всплывающее окно auth-card-popup закрывалось автоматически.

Это для приложения расширения обмена сообщениями действия, которое я создаю. Процесс входа начинается с карты авторизации. Бот указывает на соединение Dropbox OAUTH2. Вот соответствующий код, который открывает карту:

const { TeamsActivityHandler, CardFactory } = require('botbuilder');
class MsgExtActionBot extends TeamsActivityHandler {
    constructor() {
        super();
        this.connectionName = 'oauth2-provider';
    }

    async handleTeamsMessagingExtensionFetchTask(context, action) {
        if (!await this.isAuthenticated(context)) {
            return this.getSignInResponse(context);
        }
    }

    async isAuthenticated(context) {
        let tokenResponse = await context.adapter.getUserToken(
            context,
            this.connectionName
        );
        if (tokenResponse && tokenResponse.token) {
            return true;
        }
        if (!context.activity.value.state) {
            return false;
        }
        tokenResponse = await context.adapter.getUserToken(
            context,
            this.connectionName,
            context.activity.value.state
        );
        if (tokenResponse && tokenResponse.token) {
            return true;
        }
        return false;
    }

    async getSignInResponse(context) {
        const signInLink = await context.adapter.getSignInLink(context, this.connectionName);
        return {
            composeExtension: {
                type: 'auth',
                suggestedActions: {
                    actions: [{
                        type: 'openUrl',
                        value: signInLink,
                        title: 'Please sign in'
                    }]
                },
            }
        };
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...