2016-08-31 30 views
6

Tôi đang cố gắng lấy tên người dùng và email người dùng từ facebook. Tôi đọc rất nhiều thông tin về chủ đề này và đây là mã cuối cùng của tôi mà làm việc cho một số lý do duy nhất trên tài khoản ứng dụng quản trị facebook của tôi:Nhận email người dùng từ facebook trong mạng asp

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*/ 
    } 
}  

Trên mỗi qua tài khoản tôi có được loginInfo.Email bằng null.

Trong developers.facebook.com tôi có:

Approved Items

Khi ai đó nhấp vào "Đăng nhập với Facebook" anh nhận được tin nhắn này:

First facebook login page

Nếu tôi nhấp vào "Xem lại các thông tin mà bạn cung cấp "i get:

Review the info you provide

Tôi đang thiếu gì? Tại sao nó không hoạt động?

Trả lời

5

Cuối cùng tìm thấy câu trả lời! Tất cả những gì cần làm là thêm Scope = { "email" } đến FacebookOptions và điều đó giải quyết được vấn đề!

Mã của tôi bây giờ là:

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

Phần còn lại của các mã vẫn như cũ. Tôi chỉ thêm trang lỗi cho trường hợp nếu vấn đề này trả về:

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 cung cấp cho mọi người toàn quyền kiểm soát các quyền mà họ cấp cho ứng dụng. Điều khiển đó vượt quá điểm mà tại đó họ nhìn thấy hộp thoại đăng nhập. Họ có thể chọn không cấp quyền nhất định trong quá trình đăng nhập. Họ cũng có thể thu hồi quyền trong cài đặt bảo mật Facebook của họ bất kỳ lúc nào. Các ứng dụng nên kiểm tra tính hợp lệ của các quyền trước khi cố gắng thực hiện cuộc gọi API khi chúng được yêu cầu. Ví dụ: kiểm tra hành động email đó vẫn được cấp trước khi cố gắng xuất bản một câu chuyện Đồ thị mở. facebook cung cấp các thiết bị đầu cuối một graph API để lấy một danh sách các quyền được cấp:

GET /{user-id}/permissions 

Các cuộc gọi phải được thực hiện với hoặc là một người dùng truy cập thẻ hoặc thẻ truy cập ứng dụng của bạn. Cuộc gọi sẽ trả về một chuỗi JSON chứa tên phép đã được cấp cho các ứng dụng và tình trạng của họ:

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

bằng cách sử dụng này, bạn có thể phát hiện xem có thể hay không để lấy thông tin mà bạn muốn. hi vọng điêu nay co ich.

tham chiếu: https://developers.facebook.com/docs/facebook-login/permissions/requesting-and-revoking

+0

Cảm ơn câu trả lời của bạn. Điều này đã giúp tôi hiểu rằng vấn đề chắc chắn là trong yêu cầu của tôi chứ không phải quyền của người dùng. – levkaster

Các vấn đề liên quan