NextJS Facebook SDK - FB.login 不工作

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

我有一个 NextJS 13 项目,我正在尝试添加社交登录。

我似乎无法让 FB.login 做出回应。

我能找到的所有示例都是针对 JavaScript 或 React 的,而不是 NextJS,后者的处理方式可能略有不同。

我的代码:

    import Script from 'next/script';

    const LoginPage = () => {


        const facebookLoginButton = async (event) => {

            console.log("Facebook button!")

            setLoading(true);

            window.fbAsyncInit = function() {
                FB.init({
                    appId      : MY_FACEBOOK_APP_ID,
                    status     : true, 
                    cookie     : true,
                    xfbml      : true,
                    version    : 'v16.0'
                });
            };

            const { authResponse } = await new Promise(() => {window.FB.login}); <---Hangs here

            console.log(`login.js - Facebook Auth response was: `, authResponse)

        }

        return(

                <div>
                    <p>Login With:</p>
                    <Image src="facebooklogin-button.png" width="300" height="46" onClick={facebookLoginButton} alt="Login"></Image>
                </div>
                
                <Script src="https://connect.facebook.net/en_US/sdk.js" strategy="beforeInteractive"></Script>
            
        )

    }
    export default LoginPage;

注意我正在使用 NextJS 脚本标签来加载 Facebook SDK,我也尝试过这种方法但结果相同:

import { useEffect } from 'react'
    
     useEffect(() => {
        window.fbAsyncInit = function() {
          window.FB.init({
            appId            : 'MY_FACEBOOK_APP_ID',
            autoLogAppEvents : true,
            xfbml            : true,
            version          : 'v16.0'
          });
        };
     
        (function(d, s, id) {
          let js, fjs = d.getElementsByTagName(s)[0];
          if (d.getElementById(id)) return;
          js = d.createElement(s); js.id = id;
          js.src = "https://connect.facebook.net/en_US/sdk.js";
          fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));
      }, []);
      }

我怎样才能得到 FB.login 的回复?我需要获取 accessToken 以传递到我的后端。

我考虑过使用 npm 包“react-facebook-login”,但它最近一次更新是在 5 年前,所以我宁愿远离它。我还看到 Next-Auth 有一个 faceboook 社交登录,但我不认为它可以提供 accessToken,它只是为你做了一切。

感谢任何帮助!

facebook-graph-api next.js facebook-javascript-sdk facebook-sdk-4.0 next.js13
© www.soinside.com 2019 - 2024. All rights reserved.