Ok, bare mit mir auf meine Erklärung: Ich habe ein Login-System, mit dem ein Benutzer sich anmelden oder einloggen mit Facebooks API.Erlaube Facebook api das Hinzufügen von E-Mail zu DB, wenn einer bereits eingestellt ist
Ich habe einen Code hinzugefügt, um zu prüfen, ob eine E-Mail existiert, die der Facebook-E-Mail entspricht, und wenn ja, füge die Facebook-ID zu dieser Zeile in der Datenbank hinzu.
Ich habe auch eine Option in meinen Kontoeinstellungen, die es einem Benutzer ermöglicht, seine E-Mail-Adresse zu ändern.
Das Problem, das ich habe, ist, dass, wenn ein Benutzer seine E-Mail-Adresse ändert, nachdem er eine Facebook-ID erhalten hat, wenn ein Benutzer sich wieder bei meiner Website anmeldet, wird seine E-Mail auf die E-Mail auf ihrem Facebook-Konto aktualisiert.
Ich möchte immer noch erlauben User :: createOrUpdateGraphNode ($ facebook_user) eine E-Mail zu meiner Datenbank nur hinzufügen, wenn eine E-Mail nicht existiert, daher für einen neuen Benutzer.
Aber nicht, wenn eine E-Mail bereits existiert. Wenn ein Nutzer seine E-Mail-Adresse ändert, hat dies keine Auswirkungen auf die Anmeldung bei Facebook.
weiß, dass ich ich von
protected static
$graph_node_field_aliases = [
'id' => 'facebook_id',
// 'name' => 'name',
//'email' => 'email',
];
entfernen konnte, aber dann wird es nicht die E-Mail in meinem db, wenn sich ein neuer Benutzer anmeldet hinzufügen.
alles in dieser Funktion vor sich geht: createOrUpdateGraphNode($facebook_user)
so dass ich nicht sicher bin, wie etwa vielleicht gehen ein, wenn so etwas wie dies zum Beispiel das Hinzufügen:
if($user->facebook_id == facebook_id && $user->email) {
do something
}
Ich verwende sammyklaravel/facebooksdk https://github.com/SammyK/LaravelFacebookSdk
die Facebook-Rückruf sieht wie folgt aus:
function facebookCallBack(LaravelFacebookSdk $fb) {
// Obtain an access token.
try {
$token = $fb->getAccessTokenFromRedirect();
} catch (Facebook\Exceptions\FacebookSDKException $e) {
dd($e->getMessage());
}
// Access token will be null if the user denied the request
// or if someone just hit this URL outside of the OAuth flow.
if (! $token) {
// Get the redirect helper
$helper = $fb->getRedirectLoginHelper();
if (! $helper->getError()) {
abort(403, 'Unauthorized action.');
}
// User denied the request
dd(
$helper->getError(),
$helper->getErrorCode(),
$helper->getErrorReason(),
$helper->getErrorDescription()
);
}
if (! $token->isLongLived()) {
// OAuth 2.0 client handler
$oauth_client = $fb->getOAuth2Client();
// Extend the access token.
try {
$token = $oauth_client->getLongLivedAccessToken($token);
} catch (Facebook\Exceptions\FacebookSDKException $e) {
dd($e->getMessage());
}
}
$fb->setDefaultAccessToken($token);
// Save for later
Session::put('fb_user_access_token', (string) $token);
// Get basic info on the user from Facebook.
try {
$response = $fb->get('/me?fields=id,name,email');
} catch (Facebook\Exceptions\FacebookSDKException $e) {
dd($e->getMessage());
}
// Convert the response to a `Facebook/GraphNodes/GraphUser` collection
$facebook_user = $response->getGraphUser();
// dd($facebook_user['email']);
// Create the user if it does not exist or update the existing entry.
// This will only work if you've added the SyncableGraphNodeTrait to your User model.
$user = User::where('email', $facebook_user['email'])->first();
if(isset($user)) {
// // Convert the response to a `Facebook/GraphNodes/GraphUser` collection
$facebook_user = $response->getGraphUser();
$current_user = $user;
$current_user->facebook_id = $facebook_user['id'];
$current_user->save();
} else {
$user = User::createOrUpdateGraphNode($facebook_user);
}
// Log the user into Laravel
Auth::login($user);
if (Auth::user()->terms && Auth::user()->active) {
return redirect()->route('home');
}
$active = 1;
Auth::user()->update([
'active' => $active,
]);
return redirect()->route('auth.signupdetails');
}