私の説明で私と一緒にいてください:FacebookのAPIを使用してユーザーがサインアップまたはログインできるログインシステムがあります。Facebook APIが既に設定されている場合、Facebookにapiがメールを追加しないようにしてください。
私はFacebookの電子メールに一致する電子メールが存在するかどうかを確認するコードを追加しました。もしそうなら、FacebookのIDをデータベースのその行に追加します。
私のアカウント設定では、ユーザーがメールアドレスを変更できるオプションもあります。
FacebookのIDを取得した後にユーザーがメールアドレスを変更すると、次回ユーザーがログアウトして自分のサイトに戻ったときに、自分の電子メールがFacebookアカウントのメールに更新されるという問題があります。
私はまだ電子メールが存在しない場合、つまり新しいユーザのために、User :: createOrUpdateGraphNode($ facebook_user)がデータベースに電子メールを追加することを許可します。
電子メールが既に存在する場合は表示されません。ユーザーが自分のメールを変更しても、Facebookにログインしてもそれには影響しません。
は、私は私が
protected static
$graph_node_field_aliases = [
'id' => 'facebook_id',
// 'name' => 'name',
//'email' => 'email',
];
から削除することもできます知っているが、それは私のデシベル新しいユーザーがサインアップして電子メールを追加しません。
すべてがこの機能に起こっている:
if($user->facebook_id == facebook_id && $user->email) {
do something
}
私が使用しているsammyklaravel/facebooksdk https://github.com/SammyK/LaravelFacebookSdk
:createOrUpdateGraphNode($facebook_user)
はので、私は例えば、このような何かあれば追加について多分行くするかどうかはわかりません
Facebookのコールバックは、次のようになります。
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');
}