2010-07-21 38 views
5

Tôi đang tạo ứng dụng canvas Facebook tải trong iframe với Django. Tôi muốn quá trình đăng nhập hoạt động tương tự như cách Zynga thực hiện nó. Trong phương pháp này, nếu bạn chưa đăng nhập, bạn được chuyển hướng đến trang đăng nhập Facebook và sau đó đến trang yêu cầu quyền đối với ứng dụng (không có bất kỳ cửa sổ bật lên nào).Xác thực trong Ứng dụng Canvas Facebook bằng API đồ thị mới

Theo như tôi có thể nói với Zynga phải đang sử dụng FBML và chỉ chuyển đến của URL mà hình như:

http://www.facebook.com/login.php?api_key=[api_key]&canvas=1&fbconnect=0&next=[return_url]

Liệu có cách nào để đạt được một hiệu ứng tương tự trong một ứng dụng python mà tải trong iframe?

Có một phương pháp here cho thấy làm thế nào để đạt được các chuyển hướng đúng bằng sdk php mới, nhưng tôi đang cố gắng để sử dụng SDK python mới mà chỉ có phương pháp:

def get_user_from_cookie(cookies, app_id, app_secret): 
""" 
Parses the cookie set by the official Facebook JavaScript SDK. 
cookies should be a dictionary-like object mapping cookie names to 
cookie values. 
... 
""" 

Tôi có một số lao động mã mà sử dụng Javascript SDK và phương pháp get_user_from_cookie:

<div id="fb-root"> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
</div> 

<script type="text/javascript"> 
FB.init({ apiKey: 'apikey', status: true, cookie: true, xfbml: true}); 

FB.Event.subscribe('auth.login', function(response) { 
    // Reload the application in the logged-in state 
    window.top.location = 'http://apps.facebook.com/myapp/'; 
}); 
</script> 
<fb:login-button>Install MyApp</fb:login-button> 

vấn đề với phương pháp này là nó đòi hỏi người dùng phải bấm vào một nút để đăng nhập và sau đó làm việc thông qua các màn hình xác thực popup. (Lưu ý: cửa sổ bật lên cũng xuất hiện nếu tôi gọi trực tiếp cho FB.login)

Vậy ... có cách nào để sử dụng SDK javascript để chuyển hướng đến trang đăng nhập thay vì tải nó dưới dạng cửa sổ bật lên không?

Cảm ơn bạn đã trợ giúp! --Eric

Trả lời

13

Có cách nào để sử dụng SDK javascript để chuyển hướng đến trang đăng nhập chứ không phải tải nó như là một popup?

No. SDK JavaScript sẽ mở một cửa sổ mới thay vì chuyển hướng cửa sổ hiện tại.

Để trình bày cho người dùng phiên bản toàn màn hình của hộp thoại ủy quyền, bạn cần chuyển hướng họ đến https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}. Lưu ý rằng bạn không thể làm điều này từ mã phía máy chủ, vì điều đó sẽ chỉ chuyển hướng iframe và Facebook không cho phép nó. Bạn sẽ cần một tài liệu trung gian chuyển hướng cửa sổ chính.

<!DOCTYPE html> 

<!-- 
This document redirects the parent window to the authorization 
dialog automatically, or falls back to a link if the client does not 
support JavaScript. 
--> 

<html> 
    <head> 
    <script type="text/javascript"> 
     window.parent.location = 'https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}'; 
    </script> 
    </head> 

    <body> 
    You must <a target="_top" href="https://graph.facebook.com/oauth/authorize?client_id={{ application_id }}&redirect_uri={{ redirect_uri }}">authorize this application</a> in order to proceed. 
    </body> 
</html> 

Khi người dùng đã cho phép ứng dụng của bạn, người đó sẽ được chuyển hướng đến URI bạn chỉ định trong redirect_uri và Facebook sẽ cư tham số GET signed_request với tất cả các loại thông tin ngon (xem the documentation on signed requests) mà bạn có thể sử dụng để yêu cầu Facebook thay mặt người dùng.Lưu ý rằng nếu bạn có kế hoạch lưu yêu cầu đã ký này (hoặc bất kỳ thứ gì khác) vào cookie trong ứng dụng canvas, bạn cần đặt các chính sách P3P nhỏ gọn trong tiêu đề của mình; nếu không, tất cả các phiên bản của Internet Explorer sẽ bỏ qua cookie của bạn.

P3P: CP="IDC CURa ADMa OUR IND PHY ONL COM STA"

Tôi đã viết một thư viện mà làm cho nó thực sự dễ dàng để làm cho các ứng dụng Facebook vải cung cấp bởi Django, trong đó có dịch vụ chăm sóc của tất cả những điều này cho bạn. Nó được gọi là Fandjango và có sẵn trên github.

+1

Bạn có thể chuyển hướng họ đến trang ủy quyền bằng cách sử dụng top.location trong javascript – BeRecursive

+0

@BeRecursive: Có. Đó là chính xác những gì tôi đang nói. –

+0

Tại sao chuyển hướng đến trang có mã đó khi bạn viết mã vào trang? – BeRecursive

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