MVC5 (VS2012) Identité CreateIdentityAsync - Valeur ne peut pas être null

J'essaye de configurer l'authentification OAuth pour un MVC5 site (en VS2012).

J'utilise Couramment NHibernate. J'ai créer mon propre Userstore et passer dans un objet de référentiel pour l'accès NHibernate objet de session. Je passe mon magasin par défaut dans le réseau usermanager fournisseur. Ceci a par la suite travaillé pour un enregistrement local et la connexion. Je n'essaie pas de configuration connexion /inscription avec Facebook.

Il obtient un succès. Ajoute un utilisateur dans la table user, ajoute un enregistrement dans les connexions du tableau, puis explose. Je n'ai pas implémente les réclamations dans le magasin de l'utilisateur, ou de mettre une collecte des réclamations dans l'objet utilisateur. (je ne sais pas si c'est réellement nécessaire, j'ai été le décapage de tout ce que peut-être aller de mal à trouver la source du problème).

La ligne qui explose est, (dans le compte contrôleur):

var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);            

à l'intérieur de cette méthode:

private async Task SignInAsync(IdentityUser user, bool isPersistent)

c'est la fin de la trace de la pile

[ArgumentNullException: Value cannot be null.
Parameter name: value]
   System.Security.Claims.Claim..ctor(String type, String value, String valueType, String issuer, String originalIssuer, ClaimsIdentity subject, String propertyKey, String propertyValue) +14108789
   System.Security.Claims.Claim..ctor(String type, String value, String valueType) +62
   Microsoft.AspNet.Identity.<CreateAsync>d__0.MoveNext() +481
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +144
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +84
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +49
   Web.Controllers.<SignInAsync>d__42.MoveNext() in d:\Google Drive\Development\GoalManagement\Web\Controllers\AccountController.cs:375
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +144
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +84
   Web.Controllers.<ExternalLoginConfirmation>d__35.MoveNext() in d:\Google Drive\Development\GoalManagement\Web\Controllers\AccountController.cs:311
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +144
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +84

public class IdentityUser : IUser
{
    public IdentityUser()
    {
        Logins = new List<IdentityUserLogin>();
    }

    public string Id { get; set; }
    public string UserName { get; set; }
    public string PasswordHash { get; set; }
    public string SecurityStamp { get; set; }
    public IList<IdentityUserLogin> Logins { get; set; }

}

public class IdentityUserLogin
{
    public string LoginProvider { get; set; }
    public string ProviderKey { get; set; }
}

Je peux inclure mon userstore code si vous le souhaitez: je n'ai pas mis dans comme c'est un gros fichier, et pourrait nuire à la question.

Je ne suis pas sûr pourquoi, il est même en essayant de créer l'objet de revendication et pourquoi il est fait exploser. Comme je n'ai que VS2012 j'ai été patcher tous ensemble à partir d'exemples en ligne principalement.


Comme suggéré par @Chaussure j'ai hérité de UserManager:

public class NHibernateAspnetUserManager<TUser> : UserManager<TUser> where TUser : IdentityUser
{
    public NHibernateAspnetUserManager(IUserStore<TUser> store) : base(store)
    {
    }        

    public override Task<ClaimsIdentity> CreateIdentityAsync(TUser user, string authenticationType)
    {
        ClaimsIdentity identity = new ClaimsIdentity();
        return Task.FromResult(identity);
    }
}

Il maintenant n'est plus renvoyait un message d'erreur mais n'est pas réellement authentifier moi comment jamais combien de fois j'ai utiliser le Facebook s'inscrire /se connecter.


Pour résumer. Avec @Chaussure info, j'ai essayé les deux primordial UserManager.CreateIdentityAsync avec:

public override Task<ClaimsIdentity> CreateIdentityAsync(TUser user, string authenticationType)
    {
        var identity = new ClaimsIdentity();
        identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));
        return Task.FromResult(identity);
    }

et aussi d'essayer de mettre en œuvre IUserClaimStore avec le retour par défaut (liste vide).

La première ne sera pas grâce à une erreur, mais il n'est pas authentifié. Le plus tard sera encore au travers de l'étrange demande "du Système.De sécurité.Les revendications.Demande..ctor" erreur

MODIFIER

Trouvé pourquoi le ctor erreur est survenu. L'utilisateur de l'objet a été de revenir sans l'ID de sorte que le défaut UserManager était de s'énerver. Fixe et utilisé par défaut UserManager qui maintenant n'est plus renvoyait un message d'erreur, mais ne peut toujours pas se connecter l'utilisateur. L'identité de l'objet, il retourne semble bon de ce que je peux dire.

  • J'ai utilisé le construit dans le usermanager... essayé d'utiliser resharper de le décompiler, mais rien de readbale sortit à l'autre extrémité.
InformationsquelleAutor Jon | 2014-02-20