Не удается войти в систему с помощью Facebook во Flutter

Предоставленные учетные данные для аутентификации имеют неправильный формат или срок их действия истек. [Неудачный ответ debug_token от Facebook: {error: {message: Invalid OAuth access token., Type: OAuthException, code: 190, fbtrace_id: AzfZT6nJx2NshSwvPrmdgZd}}]

Это ошибка, которую я получаю в консоли. Что мне делать для успешного входа в Facebook?

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:flutter_login_facebook/flutter_login_facebook.dart';

abstract class AuthBase {
  User get currentUser;
  Stream<User> authStateChanges();
  Future<User> signInAnonymously();
  Future<User> signInWithEmailAndPassword(String email, String password);
  Future<User> createUserWithEmailAndPassword(String email, String password);
  Future<User> signInWithGoogle();
  Future<User> signInWithFacebook();
  Future<void> signOut();
}

class Auth implements AuthBase {
  final _firebaseAuth = FirebaseAuth.instance;
  @override
  Stream<User> authStateChanges() => _firebaseAuth.authStateChanges();

  @override
  User get currentUser => _firebaseAuth.currentUser;

  @override
  Future<User> signInAnonymously() async {
    final userCredential = await _firebaseAuth.signInAnonymously();
    return userCredential.user;
  }

  @override
  Future<User> signInWithEmailAndPassword(String email, String password) async {
    final userCredential = await _firebaseAuth.signInWithCredential(
      EmailAuthProvider.credential(email: email, password: password),
    );
    return userCredential.user;
  }

  @override
  Future<User> createUserWithEmailAndPassword(
      String email, String password) async {
    final userCredential = await _firebaseAuth.signInWithEmailAndPassword(
      email: email,
      password: password,
    );
    return userCredential.user;
  }

  @override
  Future<User> signInWithGoogle() async {
    final googleSignIn = GoogleSignIn();
    final googleUser = await googleSignIn.signIn();
    if (googleUser != null) {
      final googleAuth = await googleUser.authentication;
      if (googleAuth.idToken != null) {
        final userCredential = await _firebaseAuth
            .signInWithCredential(GoogleAuthProvider.credential(
          idToken: googleAuth.idToken,
          accessToken: googleAuth.accessToken,
        ));
        return userCredential.user;
      } else {
        throw FirebaseAuthException(
          code: 'ERROR_MESSAGE_ID_TOKEN',
          message: 'Missing Google ID Token',
        );
      }
    } else {
      throw FirebaseAuthException(
        code: 'ERROR_ABORTED_BY_USER',
        message: 'Sign in aborted by user',
      );
    }
  }

  @override
  Future<User> signInWithFacebook() async {
    final fb = FacebookLogin();
    final response = await fb.logIn(permissions: [
      FacebookPermission.publicProfile,
      FacebookPermission.email,
    ]);

    switch (response.status) {
      case FacebookLoginStatus.Success:
        final accessToken = response.accessToken;
        final userCredential = await _firebaseAuth.signInWithCredential(
          FacebookAuthProvider.credential(accessToken.token),
        );
        return userCredential.user;

      case FacebookLoginStatus.Cancel:
        throw FirebaseAuthException(
          code: 'ERROR_ABORTED_BY_USER',
          message: 'Sign in aborted by user',
        );
      case FacebookLoginStatus.Error:
        throw FirebaseAuthException(
          code: 'ERROR_FACEBOOK_LOGIN_FAILED',
          message: response.error.developerMessage,
        );
      default:
        throw UnimplementedError();
    }
  }

  @override
  Future<void> signOut() async {
    final googleSignIn = GoogleSignIn();
    await googleSignIn.signOut();
    final facebookLogin = FacebookLogin();
    await facebookLogin.logOut();
    await _firebaseAuth.signOut();
  }
}```

person cuteghost97    schedule 24.03.2021    source источник
comment
добавь свой код, что ты пытаешься   -  person flakerimi    schedule 24.03.2021
comment
Как он будет переходить на мою домашнюю страницу, как это происходит с другими методами - Google, электронная почта, анонимный?   -  person cuteghost97    schedule 24.03.2021


Ответы (1)


Для кода ошибки 190 первое, что вам нужно проверить, это включить ли вы facebook в качестве метода входа в консоли firebase. Перейдите в свою firebase и войдите в firebase auth и включите facebook auth, затем перейдите к правилам и дважды проверьте, есть ли у вас разрешение на чтение и запись. Затем перейдите в консоль разработчика Facebook и убедитесь, что вы добавили идентификатор пакета приложений, и все в порядке в соответствии с документацией. Проблема вызвана неверными учетными данными OAuth, что означает, что либо консоль facebook, либо консоль firebase неправильно настроены.

Обновите информацию о том, что произойдет после того, как вы начнете с этих предложений.

person Huthaifa Muayyad    schedule 24.03.2021
comment
Большое спасибо! Это сработало. - person cuteghost97; 25.03.2021
comment
Теперь у меня есть еще одна проблема: приложение позволяет пользователю входить в систему с помощью Facebook, но у меня возникают проблемы, когда пользователь хочет использовать другую учетную запись Facebook для входа, на этой странице будет отображаться только кнопка продолжения. Есть ли способ выбрать для входа другую учетную запись? @Huthaifa Muayyad - person cuteghost97; 27.03.2021
comment
И снова здравствуйте, вы можете разместить свой вопрос в новом посте и отметить меня там, я с радостью постараюсь вам помочь. Поделитесь кодом, который вы используете для вызова процесса входа. - person Huthaifa Muayyad; 27.03.2021