Как я могу изменить ReturnUrl для OpenID?

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

def remove_dangling_comma(content):
    if content[-1] == ',':
        return content[:-1]
    return content

data_columns = []
with open("words.txt", 'r') as f:
    for i, line in enumerate(f):
        if i == 0:
            continue  # skip header
        parts = line.split()
        node_name = parts[0]
        # concatenate broken parts of the same data and remove dangling commas, if any
        requested_bytes = remove_dangling_comma(' '.join([parts[1], parts[2], parts[3]]))
        total_time = remove_dangling_comma(' '.join([parts[4], parts[5], parts[6]]))
        accelerator_time = remove_dangling_comma(' '.join([parts[7], parts[8], parts[9]]))
        cpu_time = remove_dangling_comma(' '.join([parts[10], parts[11], parts[12]]))

        # append the processed data to the list
        data_columns.append([node_name, requested_bytes, total_time, accelerator_time, cpu_time])       

    print(data_columns)

Вывод:

[
    ['prefix/up20/conv2d_transpose', '18.87MB (84.66%, 7.67%)', '115.01ms (95.17%, 3.68%)', '0us (0.00%, 0.00%)', '115.01ms (95.17%, 3.68%)'],
    ['prefix/up17/conv2d_transpose', '18.87MB (76.99%, 7.67%)', '91.43ms (91.49%, 2.93%)', '0us (0.00%, 0.00%)', '91.43ms (91.49%, 2.93%)'], 
    ['prefix/fres19/conv_b_1x3/Conv2D', '2.10MB (69.33%, 0.85%)', '46.41ms (88.56%, 1.49%)', '0us (0.00%, 0.00%)', '46.41ms (88.56%, 1.49%)'], 
    ['prefix/fres5/conv_b_3x1/Conv2D', '2.10MB (68.47%, 0.85%)', '44.63ms (87.07%, 1.43%)', '0us (0.00%, 0.00%)', '44.63ms (87.07%, 1.43%)'],
    ['prefix/fres6/conv_a_3x1/Conv2D', '2.10MB (67.62%, 0.85%)', '40.19ms (85.64%, 1.29%)', '0us (0.00%, 0.00%)', '40.19ms (85.64%, 1.29%)'], 
    ['prefix/fres22/conv_a_3x1/Conv2D', '2.10MB (66.77%, 0.85%)', '39.97ms (84.36%, 1.28%)', '0us (0.00%, 0.00%)', '39.97ms (84.36%, 1.28%)'], 
    ['prefix/fres21/conv_a_3x1/Conv2D', '2.10MB (65.92%, 0.85%)', '38.85ms (83.08%, 1.24%)', '0us (0.00%, 0.00%)', '38.85ms (83.08%, 1.24%)']
]
7
задан Andrew Arnott 12 March 2009 в 14:12
поделиться

2 ответа

Это действительно легко, Bruno. Просто звоните

IAuthenticationRequest.AddCallbackArguments("returnUrl", Request.QueryString["returnUrl"]);

Это скажет DotNetOpenId сохранять returnUrl аргумент на странице входа в систему и получать поведение, которое Вы хотите. Я должен не согласиться с Franci относительно разделения URL, который отображает страницу входа в систему от той, которая обрабатывает результат. Для ASP.NET сайты MVC, которые могут быть соответствующими, но для веб-форм ASP.NET это - действительно не способ пойти, с тех пор в дополнение к отображению любой ошибки пользователю, Вы несомненно захотите также отобразить форму входа в систему снова. Кроме того, до разделения логики, библиотека DotNetOpenId делает весь тяжелый подъем для Вас, таким образом, существует едва любая логика в Вашем коде - позади страницы так или иначе.

11
ответ дан 6 December 2019 в 15:32
поделиться

Если Вы хотите, чтобы поставщик OpenID возвратился к другому URL, необходимо использовать OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) метод при создании запроса аутентификации.

Однако обычно Вы не хотите, чтобы поставщик OpenID перенаправил назад к URL, который инициировал последовательность входа в систему в рамках Вашего приложения. Вы хотите возвратиться до такой степени, когда, Вы инициировали автора OpenID для обработки правильно ответа. Помогает с инкапсуляцией уровня OpenID от остальной части логики в Вашем приложении.

Вот пример:

В моем приложении MVC ASP.NET у меня есть a User контроллер с Authenticate действие, которое обрабатывает запросы входа в систему.

Authenticate проверки действия OpenIdRelyingParty.Response. Если это null, вызовы действия RedirectToProvider. Поставщик возвращается назад к тому же действию, где я проверяю Respons.Status. Если это AuthenticationStatus.Authenticated Я использую FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, true) для возвращения к странице, пользователь инициировал вход в систему seqeuence от.

Однако, если состояние AuthenticationStatus.Failed или 'AuthenticationStatus. Отмененный', я могу предложить пользовательские шаги для разрешения, это выходит. Я могу предложить им, чтобы исправить их OpenID, если введено с опечаткой или войти в систему с именем пользователя/паролем вместо этого. (Я поддерживаю и OpenID и имя пользователя/аутентификацию по паролю для того же identitites),

Мое поле входа в систему находится на каждой странице. Если поставщик OpenID перенаправил меня назад к странице, которая инициировала запрос входа в систему, возможности состоят в том, что страница не будет способна к обработке отказа правильно.

3
ответ дан 6 December 2019 в 15:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: