Как я использую больше чем один OpenID? [закрытый]

Этот метод найдет подпоследовательность в родительской последовательности любого типа, который можно сравнить с помощью Equals():

public static bool ContainsSubequence<T>(this IEnumerable<T> parent, IEnumerable<T> target)
{
    bool foundOneMatch = false;
    using (IEnumerator<T> parentEnum = parent.GetEnumerator())
    {
        using (IEnumerator<T> targetEnum = target.GetEnumerator())
        {
            // Get the first target instance; empty sequences are trivially contained
            if (!targetEnum.MoveNext())
                return true;

            while (parentEnum.MoveNext())
            {
                if (targetEnum.Current.Equals(parentEnum.Current))
                {
                    // Match, so move the target enum forward
                    foundOneMatch = true;
                    if (!targetEnum.MoveNext())
                    {
                        // We went through the entire target, so we have a match
                        return true;
                    }
                }
                else if (foundOneMatch)
                {
                    return false;
                }
            }

            return false;
        }
    }
}

Вы можете использовать его следующим образом:

bool match = new[] {1, 2, 3}.ContainsSubsequence(new[] {1, 2}); // match == true
match = new[] {1, 2, 3}.ContainsSubsequence(new[] {1, 3}); // match == false

Обратите внимание, что он предполагает, что в целевой последовательности нет элементов null.

Обновление: спасибо за upvotes, каждый, но на самом деле есть ошибка в приведенном выше коде! Если частичное совпадение найдено, но затем не переходит в полное соответствие, процесс закончился , а не сбрасывается (что явно неверно при применении к чему-то вроде {1, 2, 1, 2, 3}.ContainsSubsequence({1, 2, 3})).

Вышеприведенный код работает очень хорошо для более общего определения подпоследовательности (т. е. смежность не требуется), но для обработки сброса (который большинство IEnumerators не поддерживает) последовательность целей должна быть переписана спереди , Это приводит к следующему коду:

public static bool ContainsSubequence<T>(this IEnumerable<T> parent, IEnumerable<T> target)
{
    bool foundOneMatch = false;
    var enumeratedTarget = target.ToList();
    int enumPos = 0;

    using (IEnumerator<T> parentEnum = parent.GetEnumerator())
    {
        while (parentEnum.MoveNext())
        {
            if (enumeratedTarget[enumPos].Equals(parentEnum.Current))
            {
                // Match, so move the target enum forward
                foundOneMatch = true;
                if (enumPos == enumeratedTarget.Count - 1)
                {
                    // We went through the entire target, so we have a match
                    return true;
                }

                enumPos++;
            }
            else if (foundOneMatch)
            {
                foundOneMatch = false;
                enumPos = 0;

                if (enumeratedTarget[enumPos].Equals(parentEnum.Current))
                {
                    foundOneMatch = true;
                    enumPos++;
                }
            }
        }

        return false;
    }
}

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

15
задан Jeff Atwood 10 September 2008 в 06:23
поделиться

6 ответов

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

, Как превратить Ваш блог в шаг 1 OpenID

: Получите OpenID. Там много серверов и сервисов там можно использовать. Я использую http://www.myopenid.com

ШАГ 2: Добавьте эти две строки к основному шаблонному промежутку своего блога <HEAD></HEAD> теги наверху Вашего шаблона. Большая часть всей поддержки механизмов блога, редактируя Ваш шаблон, таким образом, это должно быть легкой и очень возможной вещью сделать.

Пример:

<link rel="openid.server" href="http://www.myopenid.com/server" />  
<link rel="openid.delegate" href=http://YOURUSERNAME.myopenid.com/ />

Это позволит Вам использовать свой домен/блог в качестве Вашего OpenID.

Кредиты к Scott Hanselman и Simon Willison для этих простых инструкций.

Переключатель Ваш Поставщик

Теперь, когда Ваш OpenID указывает на Ваш блог, можно обновить href's рэла ссылки, чтобы указать на нового поставщика и все места на связь OpenID блога, будет использовать нового поставщика.

23
ответ дан 1 December 2019 в 01:46
поделиться

Не использование нескольких вида поставщиков открытого идентификатора подрывают точку открытого идентификатора?

0
ответ дан 1 December 2019 в 01:46
поделиться

@prakesh

, пока Вы связываете всех их на тот же адрес электронной почты, я думал бы, что он приведет Вас к той же учетной записи.

, Но каков Ваш опыт?

, Когда я испытал его, я получил совершенно новую учетную запись с 0 представителями и никакими steenkin значками. Таким образом, в данный момент ТАК не позволяет нескольким OpenID быть связанными с одной учетной записью

3
ответ дан 1 December 2019 в 01:46
поделиться

не Делает использования нескольких вида поставщиков открытого идентификатора, подрывают точку открытого идентификатора?

номер говорит использование Yahoo OpenID но Вы решаете переместиться в Google вместо этого. Несколько OpenIDs на учетную запись позволяют Вам связывать свою учетную запись с Google OpenID, затем deauthorize Yahoo OpenID.

2
ответ дан 1 December 2019 в 01:46
поделиться

В дополнение к образцу метатега Otto необходимо знать, поддерживает ли поставщик OpenID 2.0 (существуют многочисленные улучшения). Если это действительно использует метатеги в качестве следующего:

<link rel="openid2.provider" href="http://www.loginbuzz.com/provider.axd" />
<link rel="openid2.local_id" href="http://example.loginbuzz.com/" />
<link rel="openid.server" href="http://www.loginbuzz.com/provider.axd" />
<link rel="openid.delegate" href="http://example.loginbuzz.com/" />

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

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

я также рекомендовал бы покупать i-имя , поскольку это дизайном более безопасно (канонический идентификатор - i-число - связанный с i-именем принадлежит Вам, даже если i-имя истекает).

5
ответ дан 1 December 2019 в 01:46
поделиться

Ключ здесь не должен изменять идентификационные данные, никогда. Измените поставщиков, но не идентификационные данные. (это похоже на реальную жизнь)

, Таким образом, новые пользователи к OpenID должны сначала рассмотреть то, чем их идентификационные данные могли быть.

Пользователи, которые уже имеют некоторый веб-сайт, которым они владеют, должны выбрать этот URL, и у пользователей без веб-сайта есть эти опции:

  • Добираются, что-то как блог для получения URL
  • Покупает i-имя (или доменное имя)
  • или использует предоставленный URL

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

0
ответ дан 1 December 2019 в 01:46
поделиться
Другие вопросы по тегам:

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