2017-01-03 3 views
-3

J'ai rencontré le code suivant, et j'essaie de déterminer exactement ce qu'il fait.Que répond Principal.Identity.GetUserId <int>()?

if (principal.Identity is WindowsIdentity) 
{ 
    profile = //generate a profile somehow 
} 
.... 
var userId = principal.Identity.GetUserId<int>(); 

ce que je (crois) Je comprends:

principal 

est l'utilisateur actuellement connecté

cette ligne:

if (principal.Identity is WindowsIdentity) 

vérifie si actuellement connecté l'utilisateur est un utilisateur Windows par exemple connecté via Windows auth

Cette ligne est la ligne avec laquelle j'ai des problèmes. Si nous supposons à partir de là que tous les utilisateurs sont des utilisateurs de Windows, cette ligne semble obtenir l'ID de l'utilisateur.

La partie dont je ne suis pas sûr est de savoir si l'on obtient l'identifiant d'utilisateur Windows ou l'identifiant d'utilisateur assigné dans mon application. Les utilisateurs de Windows ont-ils même un ID utilisateur?

Mon problème est que cela renvoie toujours 0, et je ne peux pas comprendre pourquoi?

Si cela se rapporte à l'ID de l'utilisateur dans l'application, je suppose que cela doit être mappé ou assigné quelque part, mais encore une fois je ne peux pas voir comment.

Je suis sur ce problème la plupart du jour, mais pour tous mes googler je ne peux pas faire des progrès ...

+1

ce sera de retour créé par userid votre application –

+0

Salut je pense qu'il retourne toujours 0 car il l'id de représentons des la table aspnet utilisateur du fournisseur d'identité –

+0

Que faire si vous revenez User.GetUserName() –

Répondre

1

C'est donc la source décompilé (selon ReSharper) pour la méthode d'extension GetUserID

if (identity == null) 
    throw new ArgumentNullException("identity"); 
ClaimsIdentity identity1 = identity as ClaimsIdentity; 
if (identity1 != null) 
{ 
    string firstValue = IdentityExtensions.FindFirstValue(identity1, "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"); 
    if (firstValue != null) 
     return (T) Convert.ChangeType((object) firstValue, typeof (T), (IFormatProvider) CultureInfo.InvariantCulture); 
} 
return default (T); 

WindowsIdentity passera le casting as ClaimsIdentity sûr depuis it inherits from it

il revient si vos fenêtres identité contains a claim pour http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

Si vous obtenez 0, vous n'avez pas cette revendication