- Comment puis-je obtenir l'ID de l'utilisateur actuellement connecté dans MVC 5 ? J'ai essayé les suggestions StackOverflow, mais elles ne semblent pas être pour MVC 5.
- En outre, quelle est la meilleure pratique MVC 5 pour attribuer des éléments aux utilisateurs? (par exemple un
User
devrait avoirItems
. Dois-je stocker l'utilisateurId
dansItem
? Puis-je étendre laUser
classe avec uneList<Item>
propriété de navigation?
J'utilise "Comptes d'utilisateurs individuels" du modèle MVC.
J'ai essayé ceux-ci:
- Comment obtenir l'utilisateur actuel dans une application MVC?
- Comment obtenir l'utilisateur actuel dans ASP.NET MVC
- Obtenez l'identifiant de l'utilisateur connecté - cela lance ce qui suit:
'Membership.GetUser ()' est nul.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Adam Szabo
la source
la source
HttpContext.Current.User.Identity.Name
est le nom de l'utilisateur actuellement connecté.Item
qu'il crée, mais pas en fonction du nom d'utilisateur (cela pourrait changer). Cela ne fonctionne pas par la façon dont `HttpContext.Current 'System.Web.HttpContextBase' ne contient pas de définition pour 'Current' et aucune méthode d'extension 'Current' acceptant un premier argument de type 'System.Web.HttpContextBase' n'a pu être trouvée ( vous manque une directive using ou une référence d'assembly?) `. Êtes-vous sûr que votre solution est pour MVC 5?Réponses:
Si vous codez dans un contrôleur ASP.NET MVC, utilisez
Il convient de le mentionner
User.Identity.IsAuthenticated
etUser.Identity.Name
fonctionnera sans ajouter lausing
déclaration mentionnée ci-dessus . MaisGetUserId()
je ne serai pas présent sans cela.Si vous êtes dans une classe autre qu'un contrôleur, utilisez
Dans le modèle par défaut de MVC 5, l'ID utilisateur est un GUID stocké sous forme de chaîne.
Aucune bonne pratique pour le moment, mais j'ai trouvé des informations précieuses sur l'extension du profil utilisateur:
Identity
: https://devblogs.microsoft.com/aspnet/introducing-asp-net-identity-a-membership-system-for-asp-net-applications/la source
GetUserId
est une méthode d'extension stockée au bas deAss_Start\IdentityConfig.cs
, partout où vous avez besoin de l'utiliser, si sur un espace de noms différent, vous devrez définir leusing Microsoft.AspNet.Identity
pour que l'extension devienne visible.Essayez quelque chose comme:
Fonctionne avec RTM.
la source
Si vous souhaitez que l'objet ApplicationUser se trouve dans une ligne de code (si la dernière identité ASP.NET est installée), essayez:
Vous aurez besoin des instructions d'utilisation suivantes:
la source
Obtenir l'identifiant est assez simple et vous avez résolu cela.
Votre deuxième question est cependant un peu plus complexe.
Donc, ce sont toutes des choses d'avant-première pour le moment, mais le problème commun auquel vous êtes confronté est celui où vous étendez l'utilisateur avec de nouvelles propriétés (ou une collection d'éléments en question).
Hors de la boîte, vous obtiendrez un fichier appelé
IdentityModel
dans le dossier Models (au moment de la rédaction). Là-dedans, vous avez quelques cours;ApplicationUser
etApplicationDbContext
. Pour ajouter votre collection de,Items
vous souhaiterez modifier laApplicationUser
classe, comme vous le feriez s'il s'agissait d'une classe normale que vous utilisiez avec Entity Framework. En fait, si vous jetez un coup d'œil rapide sous le capot, vous constaterez que toutes les classes liées à l'identité (utilisateur, rôle, etc.) ne sont plus que des POCO avec les annotations de données appropriées afin qu'elles fonctionnent bien avec EF6.Ensuite, vous devrez apporter des modifications au
AccountController
constructeur afin qu'il sache utiliser votre DbContext.Maintenant, obtenir l'objet utilisateur complet pour votre utilisateur connecté est un peu ésotérique pour être honnête.
Cette ligne fera le travail et vous pourrez y accéder
userWithItems.Items
comme vous le souhaitez.HTH
la source
AccountController
?Je ressens ta douleur, j'essaye de faire la même chose. Dans mon cas, je veux juste effacer l'utilisateur.
J'ai créé une classe de contrôleur de base dont tous mes contrôleurs héritent. Dans celui-ci, je remplace
OnAuthentication
et règle lefilterContext.HttpContext.User to null
C'est le mieux que j'ai réussi jusqu'à présent ...
la source
la source
si quelqu'un d'autre a cette situation: je crée une vérification d'e-mail pour me connecter à mon application afin que mes utilisateurs ne soient pas encore connectés, mais j'ai utilisé ce qui suit pour vérifier un e-mail entré lors de la connexion, qui est une variante de la solution @firecape
vous aurez également besoin des éléments suivants:
et
la source
Dans .Net MVC5 core 2.2, j'utilise HttpContext.User.Identity.Name. Cela a fonctionné pour moi.
la source
C'est ainsi que j'ai obtenu un identifiant AspNetUser et l'ai affiché sur ma page d'accueil
J'ai placé le code suivant dans ma méthode HomeController Index ()
Dans la page d'affichage, il suffit d'appeler
Exécutez le projet et vous pourrez voir votre userId
la source