2016-10-25 4 views
1

I Implementiert einen benutzerdefinierten Benutzerservice zum Speichern von Benutzerdaten in einer Datenbank.IdentityServer WithCustomUserService bei externer Anmeldung löst nullreference-Ausnahme aus

Da bekomme ich eine NullReferenceException, wenn ich versuche, mit einem externen Anbieter wie Facebook authentifizieren.

Ich kann diesen Stapel in der Ausnahme sehen, die angibt, dass ein Wert für die Login-Seite fehlt. Als Ergebnis nach dem Klicken auf den Facebook Button stehe ich wieder auf der Login Seite.

enter image description here

Aber ich weiß nicht, warum oder welcher Wert genau

ich, dass am Ende des AuthenticateExternal sehen context.AuthenticateResult.User.Claims diese Forderungen enthält

enter image description here

meinen Benutzer Service Aussehen vereinfacht so

public override async Task AuthenticateExternalAsync(ExternalAuthenticationContext context) 
{ 
    string id = context.ExternalIdentity.Claims.FirstOrDefault(i => i.Type == "id").Value; 

       var user = await gateway.ByExternalIds(context.ExternalIdentity.Provider, id); 

       if (user == null) 
       { 
        string displayName = context.ExternalIdentity.Claims.FirstOrDefault(i => i.Type.Equals("urn:facebook:name")).Value; 

        user = new User(context.ExternalIdentity); 

        await gateway.StoreAsync(user); 
       } 

       if (user != null) 

       { 
        await gateway.SetLastLogin(user.Subject, DateTimeOffset.Now); 

        context.AuthenticateResult = new AuthenticateResult(user.Subject, GetDisplayName(user), identityProvider: context.ExternalIdentity.Provider); 
       } 
} 

Was fehlt mir?

Antwort

0

Es gefunden. Dieses Verhalten tritt auf, wenn die Methode für das De-Generieren, wenn der Benutzer aktiv ist, false zurückgibt.

Task IsActiveAsync(IsActiveContext context) 

seine wenig unerwartet, wie ich erwartet hatte, dass ich in diesem Fall wäre so etwas wie „unknown user“ oder „inaktiv user“

sehen
Verwandte Themen