如何处理Teams消息传递扩展中对OAUTH2请求的用户取消

时间:2020-07-10 20:28:58

标签: oauth-2.0 botframework microsoft-teams

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'
                    }]
                },
            }
        };
    }
}

0 个答案:

没有答案