我有一个 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,它只是为你做了一切。
感谢任何帮助!