См. аналогичный вопрос: Нужен доступ к дополнительным свойствам пользователя в User.Identity
Я хотел бы создать собственные методы проверки подлинности для использования с моими представлениями Razor, которые обеспечивают легкий доступ к свойствам IdentityUser
, связанным с объектом User.Identity, но я не уверен, как это сделать. Я хочу создать несколько пользовательских расширений, похожих на User.Identity.GetUserName()
, User.Identity.GetUserById()
и т. д., вместо использования этого ViewContextExtension. Мой тип аутентификации в настоящее время является типом по умолчанию DefaultAuthenticationTypes.ApplicationCookie
из шаблона VS2013 MVC5. Как заявил Shoe, мне нужно, чтобы это утверждение было вставлено после того, как пользователь войдет в систему.
Мои вопросы:
Как и где вы создаете пользовательское утверждение с параметром out this IIdentity
в IPrincipal?
Это позволило бы мне получить доступ к свойствам пользователя через CookieAuthentication в представлении для сущностей в настройке DDD, где у меня есть несколько DbContexts в одном приложении с использованием Identity 2.0. Со временем я буду использовать WebAPI, но сейчас я хочу, чтобы он был максимально простым. Я нашел это SO 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;
}
}
}