Что секрет к получению ClaimsResponse, работающего с DotNetOpenId?

Документация описывает where следующим образом:

Значения True указывают на то, что для вычисления ufunc в этой позиции, значения False указывают на то, чтобы оставить значение только в выходных данных. blockquote>

Давайте попробуем пример, используя параметр out:

x = np.ones(3)
np.negative(np.array([4.,5.,6.]), where=np.array([False,True,False]), out=x)

Это устанавливает x в [1., -5., 1.] и возвращает то же самое.

Это имеет некоторый смысл, если вы поймете, что «оставить значение в выходных данных» буквально означает, что выходное значение «не волнует», а не «совпадает с входным» (последняя интерпретация заключалась в том, как прочитайте это тоже в первый раз).

Проблема возникает, когда вы указываете where, но не out. По-видимому, « ufunc machinery » (который не виден в реализации np.negative() ) создает пустой выходной выходной массив, то есть значения являются неопределенными. Таким образом, местоположения, в которых where равно False, будут иметь неинициализированные значения, которые могут быть чем угодно.

Мне кажется, это неправильно, но в прошлом году была опубликована проблема NumPy , которая была закрыта. Кажется маловероятным, что он изменится, поэтому вам придется обходить его (например, самостоятельно создавая выходной массив с помощью zeros).

8
задан Andrew Arnott 12 March 2009 в 14:17
поделиться

2 ответа

Ваш код выглядит хорошо. Но знайте, что sreg расширение, которое Вы используете, не поддерживается всей операцией в секунду. Если OP, с которым Вы проходите проверку подлинности, не будет поддерживать его, то расширение ответа будет пустым, как Вы видите. Таким образом, пустая проверка всегда является хорошей идеей.

myopenid.com поддерживает sreg при поиске OP для тестирования против.

4
ответ дан 5 December 2019 в 11:28
поделиться

С latests версией DotNetOpenId этот код, кажется, хорошо работает для меня:

var request = openid.CreateRequest(openid_identifier);
var fields = new ClaimsRequest();
fields.Email = DemandLevel.Require;
fields.Nickname = DemandLevel.Require;
request.AddExtension(fields);
request.RedirectToProvider();

по возврату от поставщика:

var claimResponse = openid.Response.GetExtension<ClaimsResponse>();

PS: я использую MVC, не WebForms.

2
ответ дан 5 December 2019 в 11:28
поделиться
Другие вопросы по тегам:

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