Многие знают такой интересный сервис как Loginza. Сервис еще достаточно молодой, и многие вещи, которые бы хотелось иметь, для него еще не реализованы.
Буквально вчера мне понадобился простой способ работы с информацией об успешности или не успешности аутентификации пользователя. Я набросал простой Helper для работы с этим сервисом, скачать его можно здесь.
Тут я привел пример кода, который просто показывает как работать с библиотекой:
Буквально вчера мне понадобился простой способ работы с информацией об успешности или не успешности аутентификации пользователя. Я набросал простой Helper для работы с этим сервисом, скачать его можно здесь.
Как работать с библиотекой?
Тут я привел пример кода, который просто показывает как работать с библиотекой:
public class AccountController : Controller
{
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SignIn(string token)
{
try
{
if (token == null) throw new ArgumentNullException("token");
var loginza = new Loginza.Api.LoginzaHelper(Convert.ToInt32(ConfigurationManager.AppSettings[@"WidgetId"]), ConfigurationManager.AppSettings[@"SecureKey"]) { IsSecureCheck = true };
var authInfo = loginza.AuthInfo(token);
if (authInfo.error_type != null)
throw new AuthException(authInfo.error_message ?? "Unknown error");
else
{
FormsAuthentication.SetAuthCookie(authInfo.name.full_name, false);
}
return RedirectToAction("Index", "Home", null);
}
catch
{
return View("Error");
}
}
}
* This source code was highlighted with Source Code Highlighter.
Конструктор класса принимает 2 параметра: ID виджета и секретный ключ.
Свойство IsSecureCheck указывает на необходимость использовать безопасную проверку токена. Также в классе есть свойство ServiceUri, которое можно изменить в случае, если адрес сервиса проверки изменится.
Метод AuthInfo возвращает динамический объект (поэтому класс работает только в .NET 4), поля которого формируются на основе Json данных возвращенных сервисом.
Данная реализация не учитывает небольшой проблемы — я заметил что для разных провайдеров состав полей в Json ответе может меняться (в примере поля для провайдера Google), а значит что и набор полей в динамическом объекте будет отличаться в зависимости от того, через какой провайдер аутентифицировался пользователь.
Буду рад замечаниям и доработкам.