웹용 Facebook 로그인의 권한 관리

로그인 대화 상자를 실행할 때 수행해야 하는 중요한 사항 중 하나는 앱에서 액세스할 데이터를 선택하는 것입니다. 아래 예시에서는 사용자 데이터에 대한 액세스를 요청하는 scope 매개변수를 사용합니다. 이를 권한이라고 합니다.

권한에 대한 자세한 내용은 권한 가이드를 참조하세요. 권한과 로그인 대화 상자를 처리할 때 주의해야 할 점은 다음과 같습니다.

  • 대화 상자를 만들 때 권한을 요청하는 메시지를 포함합니다. 결과적으로 부여된 권한은 반환된 액세스 토큰과 연결되어야 합니다.
  • 플랫폼별로 필요한 권한이 다를 수 있습니다. 예를 들어 iOS에서는 사용자가 태깅된 위치를 요청할 수 있지만 앱의 웹 버전에서는 이 권한이 필요하지 않습니다.
  • 나중에 추가 기능이 필요한 경우 권한을 추가로 요청할 수 있습니다. 새 권한이 필요한 경우 이미 권한을 부여한 리스트에 필요한 권한을 추가한 다음 로그인 대화 상자를 다시 실행하기만 하면 이 대화 상자에서 새로운 권한을 요청합니다.
  • 사용자는 로그인 대화 상자에서 앱과 특정 권한을 공유하도록 하는 요청을 거부할 수 있습니다. 앱은 이러한 경우를 처리할 수 있어야 합니다. Facebook의 권한 대화 상자에서 이 내용에 대해 자세히 알아보세요.
  • 기본 필드와 email 권한 이외의 다른 정보를 요청하는 앱은 일반 사용자에게 제공되기 전에 먼저 Facebook의 검수를 거쳐야 합니다. 로그인 검수에 대한 문서 및 일반 검수 가이드라인에서 자세히 알아보세요.

권한 추가

Facebook 로그인의 모범 사례는 읽기 권한 및 게시 권한을 동시에 요청하지 않는 것입니다. 이러한 모범 사례를 준수하려면 사용자가 앱에 로그인한 이후에 추가 권한을 요청하세요. 요청하려는 새로운 권한이 포함된 로그인 대화 상자를 실행하기만 하면 됩니다.

예를 들어 다음 권한을 요청하는 로그인 버튼이 있다고 가정합니다.

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

/me/permissions에서 사용자가 승인하여 부여된 권한을 확인하면 다음과 같이 표시됩니다.

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

email 권한을 나중에 추가하려는 경우 다음과 같은 FB.login() 함수로 다시 실행할 수 있습니다.

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

(이 함수는 버튼의 이벤트 핸들러에서 호출해야 합니다. 그렇지 않으면 브라우저의 팝업 차단 도구에서 차단할 가능성이 큽니다.)

새 권한만 요청한다는 점에 유의하세요. 새 권한을 승인하는 경우 /me/permissions를 확인하면 다음과 같은 결과가 생성됩니다.

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

새로운 email 권한이 허용된 권한 리스트에 추가되었습니다.

거부된 권한 다시 요청

Facebook 로그인은 사용자가 앱과 권한을 공유하는 것을 거부할 수 있는 기능을 제공합니다. 사용자가 user_likes(좋아요)를 거부하는 경우 /me/permissions에서 부여된 권한을 확인하면 다음과 같은 결과가 생성됩니다.

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

user_likes 권한이 부여되지 않고 거부되었습니다.

거부된 앱 권한을 다시 요청할 수 있습니다. 사용자가 권한을 부여해야 하는 이유에 대한 설명이 나온 화면을 사용자에게 표시하고 다시 요청해야 합니다. 하지만 이전 섹션에 설명된 메서드를 사용하는 경우 로그인 대화 상자에서 해당 권한을 요청하지 않습니다.

사용자가 거부했던 권한이므로 개발자가 거부된 권한을 다시 요청한다는 점을 대화 상자에 명시적으로 알리지 않는 한 로그인 대화 상자에서 해당 권한을 다시 요청하지 않습니다.

명시적으로 알리려면 다음과 같이 auth_type: rerequest 플래그를 FB.login() 호출에 추가하세요.

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

그러면 로그인 대화 상자에서 거부된 권한을 다시 요청합니다. 이 대화 상자는 "권한 다시 요청" 섹션에 있는 대화 상자와 매우 비슷하지만 이 대화 상자에서는 거부된 권한에 대해 다시 요청할 수 있습니다.