Comment étendre les propriétés disponibles de l'Utilisateur.Identité

Je suis en utilisant MVC5 Identité 2.0 pour les utilisateurs à accéder à mon site web, où les informations d'authentification sont stockées dans une base de données SQL. Asp.net l'Identité a été mis en oeuvre de manière standard comme on en trouve dans de nombreux tutoriels en ligne.

La ApplicationUser classe dans IdentityModels a été étendu pour inclure certaines propriétés personnalisées, comme un entier OrganizationId. L'idée est que beaucoup d'utilisateurs peuvent être créés et attribués à une Organisation commune pour la base de données à des fins de relations.

public class ApplicationUser : IdentityUser
    {
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            //Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            //Add custom user claims here
            return userIdentity;
        }

        //Extended Properties
        public DateTime? BirthDate { get; set; }
        public long? OrganizationId { get; set; }

        //Key Mappings
        [ForeignKey("OrganizationId")]
        public virtual Organization Organization { get; set; }
    }

Comment puis-je récupérer l'OrganizationId propriété de l'utilisateur actuellement connecté depuis un contrôleur?
Est-ce disponible via une méthode une fois qu'un utilisateur est connecté ou dois-je toujours les récupérer le OrganizationId à partir de la base de données, basé sur le nom d'utilisateur à chaque fois qu'une méthode de contrôleur exécute?

Autour de la lecture sur le web j'ai vu j'ai besoin d'utiliser les éléments suivants pour obtenir de l'utilisateur connecté en UserId etc.

using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();

Cependant, OrganizationId n'est pas de propriétés disponibles à l'Utilisateur.L'identité. Ai-je besoin d'étendre l'Utilisateur.L'identité d'inclure le OrganizationId propriété? Si oui, comment dois-je faire à ce sujet.

La raison j'ai besoin de la OrganizationId si souvent, c'est que de nombreuses requêtes de table sont tributaires de la OrganizationId pour obtenir les données pertinentes de l'Organisation qui est associé à l'utilisateur connecté.

  • Ma réponse here vous aider à tous?
  • À peu près la même réponse de moi ici: stackoverflow.com/a/28138594/809357 - si vous avez besoin de cette information régulièrement dans la vie de la demande, vous pouvez le placer sur le cookie comme une réclamation.
  • Merci @Chaussure à la fois de votre réponse travaillé. En plus de vos réponses, j'ai dû ajouter une demande pour être stockées dans le cookie. Dans le IdentityModels classe que j'avais à ajouter userIdentity.AddClaim(nouvelle Demande("MyApp:OrganizationId", OrganizationId.ToString())); la public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> gestionnaire) méthode.
InformationsquelleAutor RobHurd | 2015-02-05