Состояние пользователя из OnTeamsMessagingExtensionSubmitActionAsyn c (. Net Core, Botframework, Microsoft Teams) - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь аутентифицировать пользователей в приложении Teams (из действия Отправка расширений обмена сообщениями).

В этот образец Я обнаружил, что поток аутентификации начинается в OnTeamsMessagingExtensionQueryAsync, но Мне нужно аутентифицировать пользователей из OnTeamsMessagingExtensionSubmitActionAsync (Submit action).

Все хорошо, но я не могу получить доступ к пользовательскому State, чтобы понять, аутентифицирован ли пользователь, а затем получить маркер для использования Graph. OnTeamsMessagingExtensionQueryAsync получает MessagingExtensionQuery как действие, обладающее свойством State. Но OnTeamsMessagingExtensionSubmitActionAsync получает MessagingExtensionAction как действие, которое не имеет свойства State.

Я пытался получить его через

            var state = turnContext.TurnState.Get<string>("State"); 

, но это не кажется работать. Я не нашел других вариантов, чтобы получить State.

Страница аутентификации открывается и работает нормально (я могу одобрить приложение).

Можете ли вы рассказать, как его получить? Или как авторизовать пользователей от отправки действия? Спасибо.

Полный метод ниже:

protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionSubmitActionAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
    var magicCode = string.Empty;
    var state = turnContext.TurnState.Get<string>("State"); // always null
    // var state = action.State - in sample
    if (!string.IsNullOrEmpty(state)) 
    {
        int parsed = 0;
        if (int.TryParse(state, out parsed))
        {
            magicCode = parsed.ToString();
        }
    }
    var tokenResponse = await(turnContext.Adapter as IUserTokenProvider).GetUserTokenAsync(turnContext, _connectionName, magicCode, cancellationToken: cancellationToken);
    if (tokenResponse == null || string.IsNullOrEmpty(tokenResponse.Token))
    {

        var signInLink = await(turnContext.Adapter as IUserTokenProvider).GetOauthSignInLinkAsync(turnContext, _connectionName, cancellationToken);

        return new MessagingExtensionActionResponse
        {
            ComposeExtension = new MessagingExtensionResult
            {
                Type = "auth",
                SuggestedActions = new MessagingExtensionSuggestedAction
                {
                    Actions = new List<CardAction>
                    {
                        new CardAction
                        {
                            Type = ActionTypes.OpenUrl,
                            Title = "Authorization",
                            Value = signInLink,
                        },
                    },
                },
            },
        };
    }

<<remaining code>>
    return null;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...