Anonymous
React Native FBSDK Далее: Facebook Login не возвращает электронную почту
Сообщение
Anonymous » 16 сен 2025, 18:42
Привет, я пытаюсь позволить пользователям войти в систему в Facebook и получить их идентификатор, имя и электронную почту.
Поток входа работает - я вижу, как входной ManAnager возвращает успех, и токен доступа действителен. Я даже прошу «Электронная почта» разрешение, а Facebook подтверждает, что она предоставлена. class = "Snippet-Code">
Код: Выделить всё
const fetchFacebookProfile = (accessToken) => {
return new Promise((resolve, reject) => {
const request = new GraphRequest(
"/me?fields=id,name,email,picture",
{ accessToken },
(error, result) => {
if (error) {
console.error("❌ GraphRequest error:", error);
reject(error);
} else {
console.log("✅ GraphRequest result:", result);
resolve(result);
}
}
);
new GraphRequestManager().addRequest(request).start();
});
};
const onFacebookSignIn = async () => {
console.log("🔵 Facebook login button pressed");
try {
await LoginManager.logOut(); // reset state
if (Platform.OS === "android") {
LoginManager.setLoginBehavior("web_only");
} else {
LoginManager.setLoginBehavior("browser");
}
const result = await LoginManager.logInWithPermissions([
"public_profile",
"email",
]);
console.log("📋 Facebook LoginManager result:", result);
if (result.isCancelled) {
console.log("⚠️ Facebook login was cancelled by user");
return;
}
const data = await AccessToken.getCurrentAccessToken();
console.log("🔑 Facebook AccessToken data:", data);
if (!data?.accessToken) {
throw new Error("Failed to get token from Facebook");
}
const profile = await fetchFacebookProfile(data.accessToken);
if (!profile?.email) {
console.warn("⚠️ Facebook did not return email. Fallback may be required.");
}
console.log("👤 Final Facebook profile object:", profile);
// send profile + token to backend...
} catch (err) {
console.error("❌ Facebook login error:", err);
}
};< /code>
< /div>
< /div>
< /p>
Результат LoginManager показывает, что разрешение по электронной почте было предоставлено ✅ < /p>
Токен доступа. class = "Snippet">
📋 Facebook LoginManager result: {"declinedPermissions": [], "grantedPermissions": ["openid", "public_profile", "email"], "isCancelled": false}
✅ Granted permissions: openid,public_profile,email
👤 Final Facebook profile object: {
"id": "122102279283016873",
"name": "Hamed El Ghoul",
"picture": {
"data": {
"height": 50,
"is_silhouette": true,
"url": "https://scontent-yyz1-1.xx.fbcdn.net/...jpg",
"width": 50
}
}
}
⚠️ Facebook did not return email. Fallback may be required.
Подробнее здесь:
https://stackoverflow.com/questions/797 ... turn-email
1758037325
Anonymous
Привет, я пытаюсь позволить пользователям войти в систему в Facebook и получить их идентификатор, имя и электронную почту. Поток входа работает - я вижу, как входной ManAnager возвращает успех, и токен доступа действителен. Я даже прошу «Электронная почта» разрешение, а Facebook подтверждает, что она предоставлена. class = "Snippet-Code"> [code]const fetchFacebookProfile = (accessToken) => { return new Promise((resolve, reject) => { const request = new GraphRequest( "/me?fields=id,name,email,picture", { accessToken }, (error, result) => { if (error) { console.error("❌ GraphRequest error:", error); reject(error); } else { console.log("✅ GraphRequest result:", result); resolve(result); } } ); new GraphRequestManager().addRequest(request).start(); }); }; const onFacebookSignIn = async () => { console.log("🔵 Facebook login button pressed"); try { await LoginManager.logOut(); // reset state if (Platform.OS === "android") { LoginManager.setLoginBehavior("web_only"); } else { LoginManager.setLoginBehavior("browser"); } const result = await LoginManager.logInWithPermissions([ "public_profile", "email", ]); console.log("📋 Facebook LoginManager result:", result); if (result.isCancelled) { console.log("⚠️ Facebook login was cancelled by user"); return; } const data = await AccessToken.getCurrentAccessToken(); console.log("🔑 Facebook AccessToken data:", data); if (!data?.accessToken) { throw new Error("Failed to get token from Facebook"); } const profile = await fetchFacebookProfile(data.accessToken); if (!profile?.email) { console.warn("⚠️ Facebook did not return email. Fallback may be required."); } console.log("👤 Final Facebook profile object:", profile); // send profile + token to backend... } catch (err) { console.error("❌ Facebook login error:", err); } };< /code> < /div> < /div> < /p> Результат LoginManager показывает, что разрешение по электронной почте было предоставлено ✅ < /p> Токен доступа. class = "Snippet"> 📋 Facebook LoginManager result: {"declinedPermissions": [], "grantedPermissions": ["openid", "public_profile", "email"], "isCancelled": false} ✅ Granted permissions: openid,public_profile,email 👤 Final Facebook profile object: { "id": "122102279283016873", "name": "Hamed El Ghoul", "picture": { "data": { "height": 50, "is_silhouette": true, "url": "https://scontent-yyz1-1.xx.fbcdn.net/...jpg", "width": 50 } } } ⚠️ Facebook did not return email. Fallback may be required.[/code] Подробнее здесь: [url]https://stackoverflow.com/questions/79766430/react-native-fbsdk-next-facebook-login-doesn-t-return-email[/url]