Tài liệu này hướng dẫn bạn các bước triển khai phương thức Đăng nhập bằng Facebook với Facebook SDK dành cho JavaScript trên trang web.
Bạn sẽ cần có:
Mã mẫu dưới đây sẽ chỉ cho bạn cách thêm Facebook SDK dành cho JavaScript vào trang web và khởi tạo SDK này. Nếu bạn đã đăng nhập vào Facebook, màn hình sẽ hiển thị tên và email của bạn. Nếu bạn chưa đăng nhập vào Facebook, cửa sổ bật lên có hộp thoại đăng nhập sẽ tự động hiển thị.
Quyền public_profile - cho phép bạn lấy thông tin có sẵn công khai như tên và ảnh đại diện - và quyền email không yêu cầu xét duyệt ứng dụng mà sẽ tự động được cấp cho mọi ứng dụng dùng phương thức Đăng nhập bằng Facebook.
<!DOCTYPE html> <html lang="en"> <head></head> <body> <h2>Add Facebook Login to your webpage</h2> <!-- Set the element id for the JSON response --> <p id="profile"></p> <script> <!-- Add the Facebook SDK for Javascript --> (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "https://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk') ); window.fbAsyncInit = function() { <!-- Initialize the SDK with your app and the Graph API version for your app --> FB.init({ appId : '{your-facebook-app-id}', xfbml : true, version : '{the-graph-api-version-for-your-app}' }); <!-- If you are logged in, automatically get your name and email adress, your public profile information --> FB.login(function(response) { if (response.authResponse) { console.log('Welcome! Fetching your information.... '); FB.api('/me', {fields: 'name, email'}, function(response) { document.getElementById("profile").innerHTML = "Good to see you, " + response.name + ". i see your email address is " + response.email }); } else { <!-- If you are not logged in, the login dialog will open for you to login asking for permission to get your public profile and email --> console.log('User cancelled login or did not fully authorize.'); } }); }; </script> </body> </html>
Trong Bảng điều khiển ứng dụng, hãy chọn ứng dụng của bạn và cuộn đến mục Thêm sản phẩm Nhấp vào Thiết lập trong thẻ Đăng nhập bằng Facebook. Chọn Cài đặt trong bảng điều hướng bên trái và trong phần Cài đặt OAuth ứng dụng, hãy nhập URL chuyển hướng vào trường URI chuyển hướng OAuth hợp lệ để ủy quyền thành công.
Cho biết bạn sẽ sử dụng JavaScript SDK để đăng nhập bằng cách đặt nút chuyển Đăng nhập bằng JavaScript SDK là "có", rồi nhập miền của trang lưu trữ SDK này vào danh sách Miền được phép cho JavaScript SDK. Điều này đảm bảo rằng mã truy cập chỉ được trả về cho những lệnh gọi lại trong các miền được ủy quyền. Chỉ các trang https mới được hỗ trợ cho những hành động xác thực với JavaScript SDK của Facebook.
Bước đầu tiên khi trang web tải là xác định xem người dùng đã đăng nhập vào trang web của bạn thông qua phương thức Đăng nhập bằng Facebook hay chưa. Một lệnh gọi đến FB.getLoginStatus
sẽ kích hoạt lệnh gọi đến Facebook để lấy trạng thái đăng nhập. Sau đó, Facebook gọi hàm gọi lại của bạn bằng các kết quả đó.
FB.getLoginStatus(function(response) { statusChangeCallback(response); });
{ status: 'connected', authResponse: { accessToken: '{access-token}', expiresIn:'{unix-timestamp}', reauthorize_required_in:'{seconds-until-token-expires}', signedRequest:'{signed-parameter}', userID:'{user-id}' } }
status
chỉ định trạng thái đăng nhập của người dùng trang web. status
có thể là một trong những loại sau:
Loại Status | Mô tả |
---|---|
| Người dùng đó đăng nhập Facebook và đã đăng nhập trang web của bạn. |
| Người dùng đó đăng nhập Facebook nhưng chưa đăng nhập trang web của bạn. |
| Người dùng đó chưa đăng nhập Facebook nên bạn không biết họ đã đăng nhập trang web của bạn hay chưa. Hoặc FB.logout() đã được gọi trước đó nên không thể kết nối với Facebook. |
Nếu trạng thái là connected
, phản hồi sẽ trả về các thông số authResponse
sau đây:
Thông số authResponse | Giá trị |
---|---|
| Mã truy cập của người dùng trang web. |
| Nhãn thời gian UNIX khi mã truy cập hết hạn. Sau khi mã truy cập hết hạn, người dùng đó cần đăng nhập lại. |
| Khoảng thời gian trước khi phiên đăng nhập hết hạn (tính bằng giây) và người dùng đó cần đăng nhập lại. |
| Một thông số đã ký chứa thông tin về người dùng trang web. |
| ID của người dùng trang web. |
JavaScript SDK tự động phát hiện trạng thái đăng nhập nên bạn không cần thực hiện bất kỳ điều gì để kích hoạt hành vi này.
Nếu một người dùng mở trang web nhưng chưa đăng nhập hoặc chưa đăng nhập vào Facebook, bạn có thể sử dụng hộp thoại Đăng nhập để nhắc người dùng đó thực hiện cả hai việc này. Nếu họ chưa đăng nhập Facebook thì trước tiên, họ sẽ được nhắc đăng nhập nền tảng này, sau đó sẽ được nhắc đăng nhập trang web của bạn.
Có 2 cách để đăng nhập một người nào đó:
Để sử dụng nút Đăng nhập bằng Facebook, hãy dùng Bộ cấu hình plugin của chúng tôi để tùy chỉnh nút Đăng nhập và lấy mã.
Để sử dụng nút đăng nhập của chính bạn, hãy kích hoạt hộp thoại Đăng nhập bằng lệnh gọi đến FB.login()
.
FB.login(function(response){ // handle the response });
Khi một người dùng nhấp vào nút HTML của bạn, một cửa sổ bật lên sẽ hiển thị hộp thoại Đăng nhập. Với hộp thoại này, bạn có thể yêu cầu quyền truy cập vào dữ liệu của một người dùng. Thông số scope
có thể được chuyển cùng với lệnh gọi hàm FB.login()
. Thông số không bắt buộc này là một danh sách các quyền (được phân cách bằng dấu phẩy) mà một người dùng phải xác nhận để cấp cho trang web của bạn quyền truy cập vào dữ liệu của họ. Người dùng bên ngoài phải có quyền public_profile nâng cao thì mới sử dụng được phương thức Đăng nhập bằng Facebook.
Trong ví dụ sau, người dùng đăng nhập sẽ được hỏi xem trang web của bạn có thể có quyền truy cập vào trang cá nhân công khai và email của họ hay không.
FB.login(function(response) { // handle the response }, {scope: 'public_profile,email'});
Phản hồi (để kết nối hoặc hủy) sẽ trả về đối tượng authResponse
cho lệnh gọi lại đã chỉ định khi bạn gọi FB.login()
. Phản hồi này có thể được phát hiện và xử lý trong FB.login()
.
FB.login(function(response) { if (response.status === 'connected') { // Logged into your webpage and Facebook. } else { // The person is not logged into your webpage or we are unable to tell. } });
Đăng xuất một người dùng khỏi trang web của bạn bằng cách đính kèm hàm JavaScript SDK FB.logout()
vào một nút hoặc liên kết.
FB.logout(function(response) { // Person is now logged out });
Lưu ý: Lệnh gọi hàm này cũng có thể đăng xuất người dùng đó khỏi Facebook.
Ngoài ra, việc đăng xuất trang web của bạn sẽ không thu hồi quyền mà người dùng đã cấp cho trang web của bạn trong khi đăng nhập. Bạn phải thu hồi quyền trong một bước riêng biệt. Xây dựng trang web của bạn theo cách sao cho người dùng đã đăng xuất sẽ không nhìn thấy hộp thoại Đăng nhập khi đăng nhập trở lại.
Mã này tải và khởi chạy JavaScript SDK trong trang HTML của bạn. Thay thế {app-id}
bằng ID ứng dụng của bạn và {api-version}
bằng phiên bản API Đồ thị để sử dụng. Nếu bạn không có lý do cụ thể cho việc sử dụng phiên bản cũ hơn, hãy chỉ định phiên bản mới nhất: v21.0
.
<!DOCTYPE html> <html> <head> <title>Facebook Login JavaScript Example</title> <meta charset="UTF-8"> </head> <body> <script> function statusChangeCallback(response) { // Called with the results from FB.getLoginStatus(). console.log('statusChangeCallback'); console.log(response); // The current login status of the person. if (response.status === 'connected') { // Logged into your webpage and Facebook. testAPI(); } else { // Not logged into your webpage or we are unable to tell. document.getElementById('status').innerHTML = 'Please log ' + 'into this webpage.'; } } function checkLoginState() { // Called when a person is finished with the Login Button. FB.getLoginStatus(function(response) { // See the onlogin handler statusChangeCallback(response); }); } window.fbAsyncInit = function() { FB.init({ appId : '{app-id}', cookie : true, // Enable cookies to allow the server to access the session. xfbml : true, // Parse social plugins on this webpage. version : '{api-version}' // Use this Graph API version for this call. }); FB.getLoginStatus(function(response) { // Called after the JS SDK has been initialized. statusChangeCallback(response); // Returns the login status. }); }; function testAPI() { // Testing Graph API after login. See statusChangeCallback() for when this call is made. console.log('Welcome! Fetching your information.... '); FB.api('/me', function(response) { console.log('Successful login for: ' + response.name); document.getElementById('status').innerHTML = 'Thanks for logging in, ' + response.name + '!'; }); } </script> <!-- The JS SDK Login Button --> <fb:login-button scope="public_profile,email" onlogin="checkLoginState();"> </fb:login-button> <div id="status"> </div> <!-- Load the JS SDK asynchronously --> <script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js"></script> </body> </html>