2016-10-25 5 views
1

私はデータベースにユーザーデータを格納するカスタムユーザーサービスを実装します。外部ログイン時のIdentityServer WithCustomUserServiceはnull参照例外をスローします

私はfacebookのような外部プロバイダとのauthenticaceをしようとすると、NullReferenceExceptionが発生します。

このスタックは、ログインページに値がないことを示す例外で見ることができます。 Facebookのボタンをクリックした結果、私は開始ログインページに再び立ちます。

enter image description here

しかし、なぜか、その値を正確に

私はAuthenticateExternal context.AuthenticateResult.User.Claimsの終わりにそれを見ることができる

enter image description here

私のユーザーサービスのルックスをこれらの請求が含まれているかはわかりませんこのように簡略化

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); 
       } 
} 

私は何が欠けていますか?

答えて

0

見つけました。この現象は、ユーザーがistアクティブであるかどうかを判別するメソッドがfalseを返す場合に発生します。

Task IsActiveAsync(IsActiveContext context) 

その予想外の少し私はこのケースでは、私は「不明なユーザー」または「非アクティブユーザー」

のようなものを見るだろうと予想していたとして、
関連する問題