Quản lý quyền trong phương thức Đăng nhập bằng Facebook dành cho web

Một trong những phần quan trọng nhất khi khởi chạy Hộp thoại đăng nhập là chọn dữ liệu mà ứng dụng của bạn muốn truy cập. Tất cả những ví dụ sau đều sử dụng thông số scope, đó là cách bạn yêu cầu quyền truy cập vào dữ liệu của ai đó. Tất cả được gọi chung là Quyền.

Quyền được đề cập chi tiết trong hướng dẫn về quyền của chúng tôi. Tuy nhiên, có vài điều sau đây cần nhớ khi xử lý quyền và hộp thoại đăng nhập:

  • Bạn yêu cầu quyền khi hộp thoại được tạo. Hệ thống sẽ trả về nhóm quyền được liên kết với mã truy cập.
  • Mỗi nền tảng có thể có nhóm quyền khác nhau. Ví dụ: trên iOS, bạn có thể yêu cầu dữ liệu về các địa điểm mà một người đã được gắn thẻ, trong khi đó trên phiên bản web của ứng dụng, bạn không cần phải có quyền này cho trải nghiệm.
  • Bạn có thể thêm quyền vào lúc khác khi cần thêm các chức năng. Trường hợp cần một quyền mới, bạn chỉ việc thêm quyền mình cần vào danh sách bạn đã cấp, khởi chạy lại Hộp thoại đăng nhập và hộp thoại đó sẽ yêu cầu quyền mới.
  • Thông qua Hộp thoại đăng nhập, mọi người có thể từ chối chia sẻ với ứng dụng của bạn một số quyền mà bạn yêu cầu. Ứng dụng của bạn nên xử lý tình huống này. Tìm hiểu thêm về điều đó trong hộp thoại quyền của chúng tôi.
  • Các ứng dụng yêu cầu nhiều thông tin hơn so với các trường thông tin mặc định và quyền emailphải được Facebook xét duyệt trước khi cung cấp cho mọi người.. Tìm hiểu thêm trong tài liệu về quy trình xét duyệt đăng nhậpnguyên tắc xét duyệt chung của chúng tôi.

Thêm quyền

Một trong những cách làm tốt nhất khi sử dụng phương thức Đăng nhập bằng Facebook là không yêu cầu quyền đọc và quyền đăng cùng một lúc. Để hỗ trợ phương thức này, ứng dụng của bạn có thể yêu cầu thêm quyền vào lúc khác, sau khi ai đó đã đăng nhập. Để thực hiện việc đó, bạn chỉ cần khởi chạy Hộp thoại đăng nhập chứa quyền mới mà bạn đang yêu cầu.

Ví dụ: giả sử bạn đã có Nút đăng nhập với các quyền sau:

<fb:login-button scope="public_profile" onlogin="checkLoginState();">
</fb:login-button>

Nếu đã kiểm tra /me/permissions để biết các quyền được cấp sau khi người đó chấp nhận, bạn sẽ thấy như sau:

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

Nếu muốn thêm quyền email vào lúc khác, bạn có thể khởi chạy lại quyền này bằng hàm FB.login() như sau:

FB.login(function(response) {
   console.log(response);
}, {scope: 'email'});

(Bạn phải gọi hàm này trên công cụ quản lý sự kiện của nút, nếu không các trình chặn cửa sổ bật lên của trình duyệt có thể chặn hàm này.)

Lưu ý rằng hàm này chỉ yêu cầu quyền mới. Nếu bạn chấp nhận quyền mới, khi kiểm tra /me/permissions, bạn sẽ nhận được kết quả sau đây:

{"data":
  [
    {
      "permission":"public_profile",
      "status":"granted"
    },
    {
      "permission":"email",
      "status":"granted"
    }
  ]
}

Lưu ý rằng quyền mới email đã được thêm vào danh sách các quyền được phép.

Yêu cầu lại quyền bị từ chối

Với phương thức Đăng nhập bằng Facebook, mọi người có thể từ chối chia sẻ một số quyền với ứng dụng của bạn. Nếu ai đó từ chối cấp quyền user_likes (Lượt thích), khi kiểm tra /me/permissions để biết những quyền đã được cấp, bạn sẽ nhận được kết quả như sau:

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

Lưu ý rằng người này đã từ chối cấp quyền user_likes.

Bạn có thể yêu cầu một lần để một người cấp cho ứng dụng của bạn những quyền họ đã từ chối. Bạn nên hiển thị một màn hình cho biết lý do bạn nghĩ họ nên cấp quyền đó cho bạn rồi yêu cầu lại. Tuy nhiên, nếu bạn sử dụng phương thức được mô tả trong phần trước, Hộp thoại đăng nhập sẽ không yêu cầu quyền đó.

Đó là vì sau khi ai đó từ chối một quyền, hộp thoại Đăng nhập sẽ không yêu cầu lại quyền đó trừ khi bạn nói rõ lý do bạn yêu cầu lại quyền bị từ chối.

Để thực hiện việc này, hãy thêm cờ auth_type: rerequest vào lệnh gọi FB.login():

FB.login(
  function(response) {
    console.log(response);
  },
  {
    scope: 'user_likes',
    auth_type: 'rerequest'
  }
);

Khi đó, Hộp thoại đăng nhập sẽ yêu cầu lại quyền bị từ chối. Hộp thoại này sẽ rất giống hộp thoại trong phần yêu cầu lại quyền, chỉ khác là dùng để bạn yêu cầu lại một quyền bị từ chối.