2016-08-31 8 views
6

facebookからユーザー名とユーザーメールを取得しようとしています。私はこのトピックに関する多くの情報を読んで、これは私のFacebookアプリの管理者アカウントにいくつかの理由のために働く私の最終的なコードです:すべてのオンasp netのfacebookからユーザーのメールを受信

public partial class Startup 
{ 
    public void ConfigureAuth(IAppBuilder app) 
    { 

     /*Other external login options*/ 

     var FacebookOptions = new FacebookAuthenticationOptions() 
       { 
        AppId = "My App Id", 
        AppSecret = "My App Secret", 
        SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie, 
        BackchannelHttpHandler = new FacebookBackChannelHandler(), 
        UserInformationEndpoint = "https://graph.facebook.com/v2.7/me?fields=id,name,email" 
       }; 


    } 
} 
public class FacebookBackChannelHandler : HttpClientHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) 
    { 
     if (!request.RequestUri.AbsolutePath.Contains("/oauth")) 
     { 
      request.RequestUri = new Uri(request.RequestUri.AbsoluteUri.Replace("?access_token", "&access_token")); 
     } 

     return await base.SendAsync(request, cancellationToken); 
    } 
} 
public class AccountController : Controller 
{ 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
     /*my sign in code that works on my facebook app admin account*/ 
    } 
}  

アカウント上で、私はloginInfo.Emailnullに等しい取得します。 developers.facebook.com

私が持っている:

誰かが "Facebookでログイン" をクリックすると、彼はこのメッセージを取得します

Approved Items

First facebook login page

私は「クリックあなたが提供する情報を確認した場合"私は得る:

​​

私には何が欠けていますか?それはなぜ機能しないのですか?

答えて

5

は最後に答えを見つけました!すべてが完了する必要があるのは、Scope = { "email" }FacebookOptionsに追加することです。それが問題を解決します。

マイコード:

public partial class Startup 
{ 
    public void ConfigureAuth(IAppBuilder app) 
    { 

     /*Other external login options*/ 

     var FacebookOptions = new FacebookAuthenticationOptions() 
       { 
        AppId = "My App Id", 
        AppSecret = "My App Secret", 
        SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie, 
        BackchannelHttpHandler = new FacebookBackChannelHandler(), 
        Scope = { "email" }, 
        UserInformationEndpoint = "https://graph.facebook.com/v2.7/me?fields=id,name,email" 
       }; 
    } 
} 

コードの残りの部分は同じまま。この問題が返された場合にのみ、エラーページを追加しました。

public class AccountController : Controller 
{ 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
     if(loginInfo.Email == null) 
     { 
      return RedirectToAction("FacebookError", "Account"); 
     } 
     /*my sign in code*/ 
    } 
} 
1

Facebookは、ユーザーがアプリに許可している権限を完全に制御できます。そのコントロールは、ログインダイアログが表示されるポイントを超えています。ログインプロセス中に特定のアクセス許可を与えないことを選択できます。また、Facebookのプライバシー設定でいつでも権限を取り消すことができます。アプリケーションは、必要な場所でAPI呼び出しを実行する前に、アクセス許可の有効性をチェックする必要があります。たとえば、Open Graphのストーリーを公開しようとする前に電子メールアクションが許可されていることを確認します。 Facebookが付与された権限の一覧を取得するには、グラフAPIエンドポイントを提供します。

GET /{user-id}/permissions 

コールは、ユーザーのアクセストークンやアプリのアクセストークンのいずれかを行わなければなりません。これを使用することにより

{ 
    "data": [ 
    { 
     "permission": "public_profile", 
     "status": "granted" 
    }, 
    { 
     "permission": "publish_actions", 
     "status": "granted" 
    }, 
    { 
     "permission": "user_friends", 
     "status": "declined" 
    } 
    ] 
} 

、あなたが欲しい情報を取得することが可能であるかどうかを検出したりすることはできません:呼び出しがアプリとそのステータスに付与されている許可名を含むJSON文字列が返されます。お役に立てれば。

参照:https://developers.facebook.com/docs/facebook-login/permissions/requesting-and-revoking

+0

ありがとうございます。これは、私の要求には間違いなく、ユーザー権限ではないことを理解するのに役立ちました。 – levkaster

関連する問題