★★★트러블 슈팅

페이스북 토큰에 불 들어오는거 해결

흑백 개발자 2024. 10. 5. 16:22
728x90

 

Future<void> signInWithFacebook() async {
  try {
    final LoginResult result = await FacebookAuth.instance.login();
    if (result.status == LoginStatus.success) {
      final OAuthCredential credential =
          FacebookAuthProvider.credential(result.accessToken!.token);
      final userCredential = await fbAuth.signInWithCredential(credential);
      // 사용자 정보를 Firestore에 저장하는 로직 추가
    } else {
      throw Exception('Facebook sign in failed: ${result.status}');
    }
  } catch (e) {
    print('Facebook error: $e');
    throw handleException(e);
  }
}

여기서 result.accessToken!.token
의 token 에 빨간불이 들어왔어
이 부분을 string을 줘서 해결하던데, 그방법으로 해결해줘
 
네, 이해했습니다. result.accessToken!.token에서 token 속성에 대한 오류가 발생한 것 같습니다. 이는 Facebook SDK의 버전 변경으로 인해 발생할 수 있는 문제입니다.
최신 버전의 flutter_facebook_auth 패키지에서는 AccessToken 객체의 구조가 변경되어 token 대신 tokenString을 사용합니다. 다음과 같이 코드를 수정하면 문제를 해결할 수 있습니다:
dartCopyFuture<void> signInWithFacebook() async {
  try {
    final LoginResult result = await FacebookAuth.instance.login();
    if (result.status == LoginStatus.success) {
      // 여기서 tokenString을 사용합니다.
      final OAuthCredential credential =
          FacebookAuthProvider.credential(result.accessToken!.tokenString);
      final userCredential = await fbAuth.signInWithCredential(credential);
      // 사용자 정보를 Firestore에 저장하는 로직 추가
      
      // 예를 들어:
      await usersCollection.doc(userCredential.user!.uid).set({
        'name': userCredential.user!.displayName,
        'email': userCredential.user!.email,
        'isAdmin': false,
      }, SetOptions(merge: true));
      
    } else {
      throw Exception('Facebook sign in failed: ${result.status}');
    }
  } catch (e) {
    print('Facebook error: $e');
    throw handleException(e);
  }
}
이렇게 수정하면 token 대신 tokenString을 사용하여 Facebook 액세스 토큰을 가져올 수 있습니다.
또한, 사용자 정보를 Firestore에 저장하는 로직을 추가했습니다. 이 부분은 프로젝트의 요구사항에 따라 조정할 수 있습니다.
마지막으로, pubspec.yaml 파일에서 flutter_facebook_auth 패키지의 버전이 최신인지 확인해주세요:
728x90