in packages/better-auth/src/social-providers/facebook.ts [120:194]
async getUserInfo(token) {
if (options.getUserInfo) {
return options.getUserInfo(token);
}
if (token.idToken) {
const profile = decodeJwt(token.idToken) as {
sub: string;
email: string;
name: string;
picture: string;
};
const user = {
id: profile.sub,
name: profile.name,
email: profile.email,
picture: {
data: {
url: profile.picture,
height: 100,
width: 100,
is_silhouette: false,
},
},
};
// https://developers.facebook.com/docs/facebook-login/limited-login/permissions
const userMap = await options.mapProfileToUser?.({
...user,
email_verified: true,
});
return {
user: {
...user,
emailVerified: true,
...userMap,
},
data: profile,
};
}
const fields = [
"id",
"name",
"email",
"picture",
...(options?.fields || []),
];
const { data: profile, error } = await betterFetch<FacebookProfile>(
"https://graph.facebook.com/me?fields=" + fields.join(","),
{
auth: {
type: "Bearer",
token: token.accessToken,
},
},
);
if (error) {
return null;
}
const userMap = await options.mapProfileToUser?.(profile);
return {
user: {
id: profile.id,
name: profile.name,
email: profile.email,
image: profile.picture.data.url,
emailVerified: profile.email_verified,
...userMap,
},
data: profile,
};
},