रीडायरेक्ट के बाद सत्र नहीं रख सकता है मैं अपने उपयोगकर्ता को लॉग इन करने के लिए फेसबुक PHP एसडीके का उपयोग कर रहा हूं।लार्वेल 5.2 में फेसबुक लॉगिन
मैं इस
के लिए एक गार्ड लॉगिन नामक यहाँ auth.php की मेरी कॉन्फ़िग फ़ाइल है
'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'
]
],
फेसबुक API एक्सेस करने की मैं अनुप्रयोग \ सेवाओं नाम स्थान में एक वर्ग बनाया यह फेसबुक बुलाया
अनुप्रयोग \ सेवाएं \ 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');
}
}
और यहाँ मेरी UserController मैं कहाँ अपना लॉगिन तर्क
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;
}
.........
}
लिखना सफल फेसबुक लॉगिन रीडायरेक्ट पर मैं Auth::guard()->login()
बुला के बाद बोल रहा हूँ UserController @ fbLogin मैं सत्र डंप इसे सफलतापूर्वक एक login_login_randomstring=>UserId
मैं सत्र दिखाने है। लेकिन जब मैं इसे सभी सत्र डेटा खो देता है।
लेकिन अजीब बात यह है कि यह केवल तब होता है जब यह फेसबुक रीडायरेक्ट के माध्यम से कॉल करता है। तो मैं सामान्य लॉगिन मार्गों की तरह इस फ़ंक्शन का उपयोग यह route.php
Route::get('/login','[email protected]');
में और UserController
function login(){
$user = User::find(12);
Auth::guard('login')->login($user);
return redirect('/');
}
में इस
की तरह काम करता है perfactaly पहुँच इस पद्धति का उपयोग करते हुए मैं कर सकता हूँ आसानी से यहां से रीडायरेक्ट करने के बाद सत्र डेटा लेकिन फेसबुक मामले में यह नहीं हो रहा है।
मैं दो दिनों के लिए यहाँ अटक किसी को भी मदद कर सकते हैं तो कृपया मुझे
[नोट: कृपया अपने जवाब है कि मैं वेब मिडलवेयर में मेरे मार्गों वर्गीकृत किया जाना चाहिए में उल्लेख नहीं है। ]
मुझे लगता है कि आपने पूरा प्रश्न नहीं पढ़ा है, मैंने कहा है कि सफलतापूर्वक प्रमाणीकरण के बाद मैंने अपना सत्र डेटा खो दिया है और फिर उपयोगकर्ता को दूसरे पृष्ठ पर रीडायरेक्ट कर दिया है। प्रमाणीकृत उपयोगकर्ता प्राप्त करना मेरी समस्या नहीं है। –
क्या आप कृपया जांच सकते हैं कि आप संग्रहण फ़ोल्डर में फ़ाइल करने के लिए 777 अनुमतियां कैसे देते हैं? http://stackoverflow.com/questions/31615462/session-not-saving-in-laravel-5-1 –