Старая школа на месте copy / stomp:
private static string RemoveDirtyCharsFromString(string in_string)
{
int index = 0;
int removed = 0;
byte[] in_array = Encoding.UTF8.GetBytes(in_string);
foreach (byte element in in_array)
{
if ((element == ' ') ||
(element == '-') ||
(element == ':'))
{
removed++;
}
else
{
in_array[index] = element;
index++;
}
}
Array.Resize<byte>(ref in_array, (in_array.Length - removed));
return(System.Text.Encoding.UTF8.GetString(in_array, 0, in_array.Length));
}
Не уверен в эффективности w.r.t. другие методы (т. е. накладные расходы всех вызовов функций и экземпляров, которые происходят как побочный эффект при выполнении C #).
Я наконец-то понял, что это работает, поэтому я отвечу на свой вопрос, поскольку предыдущие ответы здесь были полезны, но не рассказывают всю историю.
django-openid-auth на самом деле довольно прост в настройке и использовании. Файл README очень понятен. Если вы просто хотите использовать стандартные учетные записи Google (например, адреса @ gmail.com), вы настраиваете их в settings.py с помощью:
OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/id'
Но если вы хотите использовать учетную запись «google apps», то есть размещать Gmail в вашей собственной компании домен, то все сложнее. Я получил свои данные из этого вопроса . Чтобы использовать свои учетные записи приложений Google, настройте свой settings.py на:
OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/site-xrds?hd=example.com'
# replace example.com with your hosted google apps domain
В будущем это может работать, но сегодня, вероятно, не будет. Проблема в python-openid, на который полагается django-openid-auth. Стандартная сборка python-openid не понимает некоторые расширения протокола, которые использует Google. (Зачем Google нужно расширять протокол? Покопайтесь в http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains и отчет. Удачи.) Поэтому вам нужно вместо этого использовать прощальный патч для python-openid, который доступен здесь: http://github.com/adieu/python-openid
Установите его поверх существующего python-openid. Теперь должно работать.
Будьте осторожны с настройкой OPENID_USE_AS_ADMIN_LOGIN
, так как требует, чтобы у вас была учетная запись пользователя openid, которая является «штатным» или «суперпользователем», чтобы использовать администратора, чего не происходит по умолчанию. .Таким образом, вам нужно будет выполнить двухэтапный процесс включения openid, входа в систему с помощью openid, чтобы создать учетную запись в django, затем использовать свою старую учетную запись администратора, чтобы пометить свою собственную учетную запись openid как суперпользователя, а затем отключить не-openid admin доступ.
Еще одна вещь: администратору вашего домена, возможно, потребуется включить вход openid для вашего домена, прежде чем это сработает. Элемент управления находится по адресу http://www.google.com/a/cpanel/example.com/SetupIdp
Я использовал django-openid-auth . Работает нормально, можно создать учетную запись пользователя при первом подписании. Вы также можете связать вход openid с учетной записью пользователя в панели администратора django.
Мне понравилось, что Социальная регистрация Django позволила мне довольно легко подключать учетные записи Google, Facebook, Yahoo и любой другой сайт OpenID. Вам просто нужно указать поставщика в виде ссылки, например:
Все они практически идентичны. Мне нравится django-authopenid . Он имеет отличную документацию и чрезвычайно прост в использовании. Он будет делать именно то, что вы хотите, и делать это лучше, чем django-openid (это единственный вариант, который я пробовал).
HTH