Merhaba Baran,
OAuth işlemleri için hangi provider / servis sağlayıcı olursa olsun üç aşağı beş yukarı süreç aşağıdaki gibi işler,
Geliştirici, OAuth servis sağlayıcıdan, client id, key, secret vs gibi bazı kriterleri alır (senin örneğinde facebook da oluşturduğun client_id ve client_secret alması gibi) .
İster Socialite kullan ister başka bir eklenti, sonraki süreç, bu kriterlerle ilgili servis sağlayıcıya login işlemini başlatmak için istek yollamak diyebiliriz, (örneğin facebook) ,
Socialite::driver('facebook')->redirect();
Yukarıdaki redirect ile kullanıcı yeni bir sayfaya yönlendirilir, facebook hesabını kullanarak login olur(ya da twitter, google vs.) .
Sonra, login işlemi başarılıysa, facebook ya da twitter sana bir OAuth access token geri döndürür, bu token i kullanıp ikinci bir request / istek gerçekleştiririz ve bu token sayesinde(facebook ya da twitter bu token i login olan kişinin, senin uygulamana verdiği yetki olarak görür), kullanıcı bilgisini facebook dan ya da twitterdan alabiliriz.
Yukarıdaki, süreç senin için Socialite tarafından yönetilmekte, sana dusen sadece Socialite için sağladığın callback de gelen veriyi isleyip kayıt işlemini gerçekleştirmen ya da kullanıcı kayıtlıysa login işlemini gerçekleştirmen .
Şimdi, facebook benim bildiğim kadarıyla, başarılı bir login işleminden sonra suna benzer bir kullanıcı bilgisi döndürmekte;
id, name, email, avatar/profilepic
$user = Socialite::driver('facebook')->user();
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();
Burada dikkat etmen gereken, her provider ın ayni veriyi döndürmeyeceğidir. Yada ayni veriyi farklı isimde geri alma ihtimalinin de olduğu dur,(Displayname => nickname gibi) örneğin, twitter email döndürmemekte, facebook da da twitter dekine benzer bir username yok, bazıları avatar bazıları profil resmi için URL döndürmekte vs. Ve hiç bir servis sağlayıcısı geriye password de döndürmez.
Senin öncelikli yapman gereken,
$user = Socialite::driver('facebook')->user(); , çağrısından sonra, Socialite in facebook için neleri döndürdüğünü bulman.
var_dump($user); isini görecektir,
Hangi verilerin döndüğünü öğrendikten sonra,
Kullanıcıyı oluştururken, şifreyi kendin oluşturmak zorundasın, bir de facebookdan donen user bilgisinden bir alanı alıp username olarak kullanmak zorundasın, ister facebook için ister twitter veya github veya diğer servis saglayicilari için, kullanıcılar, email lerini değiştirebiliyor, hesaplarını kapatıp yeniden açabiliyorlar vs. buda ilerisi için bazı zorluklara yol açıyor.
Benim tavsiyem, kullanıcı login olduktan ve genel bilgileri kaydettikten sonra, yani suna benzer bir şey den sonra;
$user = Socialite::driver('facebook')->user();
User::create([
'name' => $user->name,
'email' => $user->email,
'facebook_id' => $user->id,
'avatar' => $user->avatar
]);
Kullanıcıyı son bir işlem için yeni sayfaya örneğin, users/{id}/profile gibi, yönlendirmen ve bu sayfada, kullanıcıya bir username ve şifre seçimine zorlaman.
Diğer seçenek, kullanıcının, facebook dan aldığın email i ya da her hangi bir başka alanını, username olarak ataman, geçici bir şifre belirlemen ve kullanıcıyı bu şifreyi değiştirmesi için yönlendirmen, şeklinde sıralanabilir.
'name' =>$user->name,
'email' => $facebookUser->email,
'username' => $facebookUser->email,
'password' => Hash::make(uniqid()),
'facebook_id' => $facebookUser->id,
'avatar' => $facebookUser->avatar
Bu arada, ben Socialite yerine satellizer i kullanıyorum, daha esnek, cok daha iyi dokümantasyonu mevcut, Angular için yazılmış bir paket ama login uygulamasını angular ile yazıp kullanıyoruz.
https://github.com/sahat/satellizer
https://github.com/sahat/satellizer/tree/master/examples/server/php
İnşallah fikir vermiştir.