2016-10-18 131 views
2

我有新鲜的Laravel 5.1发行版。 我开始的第一件事是扩展Guard类以实现我自己的身份验证驱动程序。我对Laravel真的很陌生。所以,这是我到目前为止所做的。Laravel 5.1会话不工作

配置/ auth.php

'driver' => 'crm', 

提供商/ AuthServiceProvider.php

public function boot(GateContract $gate) 
    { 
     Auth::extend(
      'crm', 
      function ($app) { 
       $model = $app['config']['auth.model']; 
       $provider = new EloquentUserProvider($app['hash'], $model); 

       return new CrmGuard($provider, $app->make('session.store')); 
      } 
     ); 
    } 

目前,我已经有一个用户ID存储在会话数组,我可以通过

访问
session_start(); 
$_SESSION['user_id']; 

但我想在会话管理中使用Laravel构建。 我试图改写Guarduser方法在我CrmGuard类,我需要从会议的价值,我试图像这样

$id = $this->session->get('user_id');

session('user_id')

下面是我试图在测试时致电user方法

Route::get('/', function() { 
    \Illuminate\Support\Facades\Auth::user(); 
    //return view('welcome'); 
}); 

但它总是返回NULL,我做错了什么?谢谢。

+0

是这条航线由'web'中间件覆盖?你可以用'php artisan route:list'快速检查。 – TheFallen

+0

它说我正在使用'auth'中间件,我可以做什么? –

+0

可能是因为我在路由中添加了'middleware'=>'auth',因为我需要所有路由都是安全的,但是当我添加'middleware'=>'web'时,它说'Class web does not exist' –

回答

0

Laravel的会话驱动程序是由一点点的不同之处在于PHP会话,所以它不会以这种方式工作:

session_start(); 
$_SESSION['user_id']; 

它的商店在文件(服务器端)的deafualt(你可以改变这个驱动程序)并且只是向客户端公开请求。而不是使用PHP会话,使用Laravel的会话内置的驱动程序与\Session::get()Session::put(),你可以在这里阅读:

https://laravel.com/docs/5.1/session

+0

对不起,如果我不够清楚,但我需要使用'php'会话机制,因为''user_id''值提供由另一个应用程序,而不是我通过Laravel本身创建的东西 –

+0

什么意思:“因为'user_id'值是由另一个应用程序提供的”?如果这来自另一个应用程序,那么你将永远不会到达正确的会话cookie。如果它是* Laravel *,那么它不会变化。 –

+0

好吧,是的,它似乎够奇怪了。我有自定义的Web应用程序,我添加了一个Laravel项目(只需将Laravel目录放入自定义应用程序的根目录中)。这就是我所拥有的。我可以在我的Laravel项目中通过'$ _SESSION ['user_id'];'访问由定制应用程序提供的会话值。但无论如何,你的回答很有帮助,现在我发现这是我获得这些价值的唯一现有方式。 –