2016-09-12 28 views
14

Kullanıcılarımı kaydetmek için Facebook PHP SDK kullanıyorum. Facebook login in laravel 5.2 Beni yönlendirdikten sonra oturumu tutamam

Ben İşte Facebook api erişmek için i App \ hizmetleri ad alanında bir sınıf oluşturdu Facebook denir

'guards' => [ 
    'web' => [ 
     'driver' => 'session', 
     'provider' => 'users', 
    ], 

    'api' => [ 
     'driver' => 'token', 
     'provider' => 'users', 
    ], 
    'admin'=>[ 
     'driver'=>'session', 
     'provider'=>'adminusers', 
    ], 
    'verify'=>[ 
     'driver'=>'session', 
     'provider'=>'verify', 
    ], 
    'login'=>[ 
     'driver'=>'session', 
     'provider'=>'users' 
    ] 
], 

auth.php benim yapılandırma dosyası olan bu

için giriş denilen bir bekçi yarattı

App \ Services \ Facbook.php

<?php 
namespace App\Services; 

use Illuminate\Support\Facades\Cache; 
use Illuminate\Support\Facades\Config; 

use App\Extensions\Facebook\FacebookLaravelPersistentDataHandler; 
use Facebook\Facebook as FB; 
use App; 

class Facebook{ 

protected $fb; 

protected $helper; 

protected $permission; 

protected $log; 

protected $canvashelper; 

protected $persistentDataHandler; 

function __construct() 
{ 
    $this->fb = new FB([ 
        'app_id'=>Config::get('facebook.app_id'), 
        'app_secret'=>Config::get('facebook.app_secret'), 
        'default_graph_version' => Config::get('facebook.default_graph_version'), 
        'persistent_data_handler' => new FacebookLaravelPersistentDataHandler(), 
        ]); 

    $this->helper = $this->fb->getRedirectLoginHelper(); 

    $this->permission = Config::get('facebook.permission'); 

    $this->log = new Logging(Config::get('facebook.logfile'),'Facebook Log'); 

    $this->canvashelper = $this->fb->getCanvasHelper(); 

    $this->persistentDataHandler = new FacebookLaravelPersistentDataHandler(); 
} 

public function FBAuthUrl() 
{ 
    if($this->isFBAuth()) 
    { 
     return $this->helper->getLogoutUrl($this->persistentDataHandler->get('facebook_access_token'),route('facebook.logout')); 
    } 
    else 
    { 
     return $this->helper->getLoginUrl(route('facebook.callback'),$this->permission); 
    } 
} 

public function LoginCallback() 
{   
    $accessToken = $this->helper->getAccessToken(); 
    if(isset($accessToken)) 
    { 
     $this->persistentDataHandler->set('facebook_access_token',(string) $accessToken); 
    } 

} 

public function isFBAuth() 
{ 
    return $this->persistentDataHandler->has('facebook_access_token'); 
} 

public function getFBUser() 
{ 
    if($this->isFBAuth()) 
    { 
     $this->fb->setDefaultAccessToken($this->persistentDataHandler->get('facebook_access_token')); 
     /*,user_birthday,user_tagged_places*/ 
     $response = $this->fb->get("/me?fields=id,name,first_name,last_name,age_range,link,gender,locale,picture,timezone,updated_time,verified,email"); 
     return $response->getGraphUser(); 
    } 
    else 
    { 
     return false; 
    } 
} 

public function logout() 
{ 
    $this->persistentDataHandler->delete('facebook_access_token'); 
    $this->persistentDataHandler->delete('state'); 
} 

} 

Ve İşte ben i başarılı bir şekilde login_login_randomstring=>UserId i oturumu göstermek oturumu dökümü Auth::guard()->login() çağrıldıktan sonra UserController @ fbLogin arıyorum Başarılı Facebook giriş yönlendirme On my giriş mantığı

class UserController extends Controller 
{ 
    ..... 
/* 
* Facebook login callback function 
* @param Object App\services\Facebook 
* return redirect 
*/ 

public function fbLogin(Facebook $facebook) 
{ 
    $facebook->LoginCallback(); 

    /* 
    * get the usergraphnode from facebook 
    */ 
    $fbUser = $facebook->getFBUser(); 

    /* 
    * Convert UserGraphNode User To Eloquent User 
    */ 
    $user = $this->getFBLoggedUser($fbUser);   

    /* 
    * Here Log the user in laravel System 
    */ 
    Auth::guard('login')->login($user); 
    //dump(Auth::guard($this->guard)->user()); 
    dump(session()->all()); 
    return reidrect('/'); 
} 


public function getFBLoggedUser($fbUser) 
{ 
    if(User::where('email','=',$fbUser->getField('email'))->count()) 
    { 
     $user = User::where('email','=',$fbUser->getField('email'))->first(); 
     if($user->fb_app_id){ 
      $user->fb_app_id = $fbUser->getField('id'); 
      $user->save(); 
     } 
    } 
    else 
    { 
     $user = $this->FBregister($fbUser); 
    } 
    return $user; 
} 


/** 
* Register The user logged in from Facebook 
* 
* @param \Facebook\GraphNodes\GraphUser; 
* 
* return \App\Models\User 
*/ 
public function FBregister($fbUser) 
{ 
    $user = new User(); 
    $user->fname = $fbUser->getField('first_name'); 
    $user->lname = $fbUser->getField('last_name'); 
    $user->gender = $fbUser->getField('gender'); 
    $user->email = $fbUser->getField('email'); 
    $user->fb_app_id = $fbUser->getField('id'); 

    $picture = $fbUser->getField('picture'); 
    if($picture->isSilhouette()){ 
     $user->profile_image = $picture->getUrl(); 
    } 

    $user->save(); 

    return $user; 
} 

......... 
} 

yazmak benim UserController olduğunu. ama ne zaman ben bütün oturum verilerini kaybettiğimde.

Ancak garip olan şey, sadece facebook yönlendirmesini çağırdığında gerçekleşmesidir. i normal giriş yolları gibi bu işlevi kullanırsanız kolayca erişimini i can Bu yöntemi kullanarak route.php

Route::get('/login','[email protected]'); 

ve UserController

function login(){ 
$user = User::find(12); 
Auth::guard('login')->login($user); 
return redirect('/'); 
} 

bu

gibi perfactaly çalışır Oturum verileri buradan yönlendirildikten sonra, ancak facebook durumunda gerçekleşmiyor. i web katman benim yolları gruplandırılmış gerektiğini Yanıtınızda söz etmeyin:

Herkes beni

[Not yardımcı olabilir lütfen iki gün sıkışmış. ]

cevap

7

Laravelde çok derin kazdıktan sonra neyi yanlış yaptığımı buldum. Ve ben gönderiyorum gelecekte biraz yardımcı olabilir.

Önemli olan: - Laravel kayıt seansı, kullanım ömrü boyunca en sonuncusunu korur. Oturumu kaydeder, başlık yanıtı gönderir. Bu yüzden, eğer denetleyici sınıfında bir şeyi yankılanırsak, o zaman kaydetme oturumu yapmaksızın üstbilgi yanıtı gönderir ve oturumumuz kaydedilmez.Benim durumumda, laravel varsayılan yaşam döngüsünü sonlandıran ve tarayıcıya üstbilgi yanıtını zorla gönderen denetleyicimde dump işlevini kullanıyorum. Bu yüzden tüm oturum verileri kaybolur. dump()'u kodumdan kaldırırım ve her şey düzgün çalışmaya başlıyor.

4

API belgelerine https://laravel.com/api/5.2/Illuminate/Auth/Guard.html göre şu anda doğrulanmış kullanıcı almak için user() yöntemini çağırmalıdır. Bu yüzden Auth::guard() yerine Auth::user($user) kullanın.

+0

Sanırım tam olarak soru sormadınız, oturum verilerini başarılı bir şekilde doğruladıktan sonra kaybettim ve kullanıcıyı başka bir sayfaya yönlendirdim. Kimliği doğrulanmış bir kullanıcının alınması benim sorunum değil. –

+0

777 izinlerinin depolama klasöründe nasıl dosyalandığını kontrol edebilir misiniz? http://stackoverflow.com/questions/31615462/session-not-saving-in-laravel-5-1 –

4

oturumu için kişisel sınıfını kullanın laravel, socialite

Facebook php sdk kullanımı $ _SESSION.In laravel Bu değişkeni erişemez facebook ile giriş için eklenti sosyetik kullanmayı deneyin.

+0

Çok iyi biliyorum, bu yüzden özel bir prehisent veri işleyicisi sınıfı ekledim 'App \ Extensions \ Facebook \ FacebookLaravelPersistentDataHandler “Verileri oturuma yazmanın sorumlusu”. Socialite kullanımı hakkında, iyi bir eklenti ama biz facebook ile sadece çok temel hizmetler alabilirsiniz. –

+0

ve neden oturumun verilerini kaybettiğini buldum, cevabınız için cevabımı –

2

Api koduna ve facebook belgelerinize göre. Basit oturum istek ile çalışıyor. Sen

Session::put('userid','1'); 

sizin durumunuzda değerini

$request->session()->get('userid') //or 
    {!! Session::get('userid') !!} 

Çok faydalı bir şey al değerindeki koymak oturum için

ile verilerinizi kaydedebilirsiniz.

+0

kontrol edin ama bu benim sorunum değildi. Cevabımdaki sorunun cevabını detaylarıyla açıklarım. Cevabımı gör –