Identity 2.0: создание пользовательского ClaimsIdentity, например: User.Identity.GetUserById <int> (int id) для проверки каждого запроса
Смотрите этот похожий вопрос:Требуется доступ к дополнительным пользовательским свойствам в User.Identity
Я хотел бы создать собственные методы аутентификации для использования со своими Razor Views, которые обеспечивают легкий доступIdentityUser
свойства, относящиеся к объекту User.Identity, но я не уверен, как это сделать. Я хочу создать несколько пользовательских расширений, похожих наUser.Identity.GetUserName()
, User.Identity.GetUserById()
и т.д ... вместо того, чтобы использовать этоViewContextExtension метод. Мой тип аутентификации в настоящее время является типом по умолчаниюDefaultAuthenticationTypes.ApplicationCookie
из шаблона VS2013 MVC5. Как заявил Shoe, мне нужно вставить эту заявку после того, как пользователь войдет в систему.
Мои вопросы:
Как и где вы создаете пользовательское утверждение, которое имеет выходной параметрthis IIdentity
под IPrincipal?
Это позволило бы мне получить доступ к свойствам пользователя через CookieAuthentication в представлении для сущностей в настройке DDD, где у меня есть несколько DbContexts в одном приложении с использованием Identity 2.0. В конечном итоге я буду использовать WebAPI, но сейчас я хочу сделать его как можно более простым. я нашелэто так Q & A но он ориентирован на веб-формы с использованием билетов. Не уверен, что разница между билетами и токенами тоже?
Это текущий подход, который используетViewContext
с базового контроллера:
Посмотреть:
@using Microsoft.AspNet.Identity
@using Globals.Helpers
@using Identity //custom Identity for Domain
@using Microsoft.AspNet.Identity.Owin
@if (Request.IsAuthenticated)
{
var url = @ViewContext.BaseController().GetAvatarUrlById(User.Identity.GetUserId<int>());
//...
}
BaseController.cs
public string GetAvatarUrlById(int id)
{
var user = UserManager.FindById(id);
return "../../" + user.ImageUrl;
}
Extensions.cs
public static class ViewContextExtension
{
public static BaseController BaseController(this ViewContext view)
{
var baseController = (BaseController)view.Controller;
return baseController;
}
}
Что я ищу, но где и как?
Посмотреть:
<img src="@User.Identity.GetAvatarUrl()" alt="User.Identity.GetAvatarUrl()" />
РЕШЕНИЕ
Я просто отредактировалExtension.cs файл и используемое наследование для базового контроллера, который используется для _LoginPartial.cshtml и отредактировалViewContextExtension
учебный класс:
#region ViewContextExt
public static class ViewContextExtension
{
public static BaseController BaseController(this ViewContext view)
{
var baseController = (BaseController)view.Controller;
return baseController;
}
public static string GetAvatarUrl(this IIdentity identity)
{
return ((ClaimsIdentity)identity).Claims.First(c => c.Type == "AvatarUrl").Value;
}
}
}
endregion