每当我尝试使用 Facebook 凭据登录时,都会出现“访问令牌错误”

问题描述 投票:0回答:1

如果有人可以提供帮助,我将不胜感激,因为我已经花了近 5 天的时间来努力解决这个问题。我尝试了这里和另一个论坛中的所有主题,但没有成功。

我正在尝试使用 Facebook 的凭据登录我的应用程序。

我在 firebase 上创建了帐户,Facebook 开发人员和我向 Ann 提供了必要的输入以继续操作。

在我的应用程序中,我使用此功能,一旦我按下登录按钮,该功能就会被触发:

    func loginButton(_ loginButton: FBSDKLoginKit.FBLoginButton, didCompleteWith result: FBSDKLoginKit.LoginManagerLoginResult?, error: (any Error)?) {
    
    guard let token = result?.token?.tokenString else {
        print("User failed to login in with facebook")
        return
    }
    
    let credential = FacebookAuthProvider.credential(withAccessToken: token)
    
    FirebaseAuth.Auth.auth().signIn(with: credential, completion: { [weak self] authResult, error in
        guard let strongSelf = self else {
            return
        }
        
        guard authResult != nil, error == nil else {
            if let error = error {
                print("Facebook credential login failed, MFA may be needed - \(error)")
            }
            
            return
        }
        
        print("Successfully login")
        strongSelf.navigationController?.dismiss(animated: true, completion: nil)
    })
}

在进行任何操作之前,只需按下按钮,它就会引导我访问 Facebook,并附有以下注释:

如果您不使用有限登录,则需要使用 iOS Graph API 处理所有 Graph API 调用。访问令牌将无效。要了解有关 iOS 版 Facebook SDK 的更改以及如何继续使用 Facebook Login SDK 的更多信息,请访问博客。

登录后,登录时出现以下错误:

Domain=FIRAuthErrorDomain Code=17004 "Bad access token" UserInfo={FIRAuthErrorUserInfoNameKey=ERROR_INVALID_CREDENTIAL, NSLocalizedDescription=Bad access token}

在 Firebase 的身份验证选项卡中,我提供应用程序 ID Facebook 和应用程序密码。

在 info.list 中,我将其作为源代码打开,并提供以下输入:

    <key>CFBundleURLTypes</key>
<array>
  <dict>
  <key>CFBundleURLSchemes</key>
  <array>
    <string>fb1183972462675995</string>
  </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>1183972462675995</string>
<key>FacebookDisplayName</key>
<string>My app</string>

我不确定我错过了什么或我犯了什么错误。 如果有人可以支持的话,我们将不胜感激。

提前感谢大家。

swift facebook credentials
1个回答
0
投票

这对我来说是工作

import 'package:crypto/crypto.dart';
import 'dart:math';
import 'dart:convert';

String _generateNonce([int length = 32]) {
    const charset =
        '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';
    final random = Random.secure();
    return List.generate(length, (_) => 
      charset[random.nextInt(charset.length)]).join();
}

String _sha256ofString(String input) {
    final bytes = utf8.encode(input);
    final digest = sha256.convert(bytes);
    return digest.toString();
}

Future<UserCredential> facebookSignIn() async {
    if (Platform.isIOS) {
         final rawNonce = _generateNonce();
         final nonce = _sha256ofString(rawNonce);
         final LoginResult loginToken = await FacebookAuth.instance.login(
             loginTracking: LoginTracking.limited,
             nonce: nonce,
         );
         final OAuthCredential facebookAuthCredential =
             OAuthProvider('facebook.com').credential(
                 idToken: loginToken.accessToken!.tokenString,
                 rawNonce: rawNonce,
             );
         return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.