2016-10-18 19 views
2

私は新鮮なLaravel 5.1の配布をしています。 私が最初に始めたのは、私自身のauthドライバを実装するためにGuardクラスを拡張することでした。私はララベルで本当に新しいです。だから、これまで私がやったことはここにあります。Laravel 5.1セッションが動作しません

のconfig/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ビルドを使用したいと思います。 私はCrmGuardクラスでGuardクラスのuserメソッドを書き換えしようとしていると私はセッションからこれらの値を取得する必要があり、私はそう

$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のセッションを使用しての、あなたはここで読むことができます\Session::get()Session::put()でドライバーにビルドLaravelのセッションでしょうか? 'php artisan route:list'ですぐに確認できます。 – TheFallen

+0

私は 'auth'ミドルウェアを使用していると言います。 –

+0

おそらく私は私のルートに 'ミドルウェア' => 'auth'を追加したので、私はすべてのルートを安全にする必要があるので、ミドルウェア=> 'web' –

答えて

0

Laravelのセッションドライバが、それがこのように動作しませんので、PHPのセッションことを少し差行われます。ファイル内

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

それのストア(サーバー側)deafualtで(あなたがこのドライバを変更することができますが)、要求のために(クライアント側に)公開するだけです。

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

+0

申し訳ありませんが、私は十分にはっきりしていないが、 '' user_id ''値が提供されているので '' php'別のアプリケーションでは、Laravel自体で作成したものではない –

+0

意味:「user_idの値が別のアプリケーションによって提供されたため」これが別のアプリケーションから来た場合、正しいセッションクッキーには決して行きません。それが* Laravel *かどうかは分かりません。 –

+0

ええ、ええ、それは十分に賢いようです。カスタムWebアプリケーションがあり、Laravelプロジェクトを追加しました(Laravelディレクトリをカスタムアプリケーションのルートディレクトリに配置しました)。それは私が持っているものです。そして私はLaravelプロジェクトの '$ _SESSION ['user_id'];でカスタムアプリケーションが提供するセッション値にアクセスできます。しかし、とにかく、あなたの答えは役に立ちました。私は、これが私がこれらの価値を得るための唯一の方法だと分かりました。 –

関連する問題