質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

3289閲覧

Laravel 5.3 でAuthクラスが利用できなくて困ってます。

wasi300

総合スコア66

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/06/05 10:25

Authクラスを利用しようとするとエラーになる

Laravelの5.3.31を利用しています。
LaravelのAuth::attempt()を利用しようと考えています。
が、Authクラスを利用すると、エラーになります。
(例)
Auth::attempt
Auth::validate
Auth::user
を利用した場合、全て同じエラーメッセージが出力されます。

###発生している問題・エラーメッセージ
Authクラスが利用できません。

Argument 3 passed to Illuminate\Auth\SessionGuard::__construct() must be an instance of Illuminate\Contracts\Session\Session, instance of Illuminate\Session\Store given, called in /var/www/html/booking/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php on line 125 and defined

Illuminate \ Auth \ SessionGuard :: __ construct()に渡される引数3は、

/ var / www / html / booking / vendor / laravelで呼び出された
Illuminate \ Contracts \ Session \ Sessionのインスタンスである必要があります。
/framework/src/Illuminate/Auth/AuthManager.php 125行目に定義されています

SessionGuardのコンストラクタの第三引数は、Laravelのセッションである必要があると、
そんな文言のように読み取れます。

###エラーの文言に関連する部分

エラーメッセージに出てくるコンストラクタの引数の部分

vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php

php

1 public function __construct($name, 2 UserProvider $provider, 3 Session $session, // セッションを引数に取ってます 4 Request $request = null) 5 { 6 $this->name = $name; 7 $this->session = $session; 8 $this->request = $request; 9 $this->provider = $provider; 10 } 11

エラーメッセージに出てくるSessionGuardの呼び出し部分
vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php

php

1 public function createSessionDriver($name, $config) 2 { 3 $provider = $this->createUserProvider($config['provider']); 4 5 $guard = new SessionGuard($name, $provider, $this->app['session.store']); 6 //ここでセッションを渡しているように見えるのですが、ここでエラーになります。 7

$this->app['session.store']が第三引数なので、Sessionのインスタンスを与えているように見えます。
この変数をダンプしてみます。

var_dump($this->app['session.store']);

php

1 2object(Illuminate\Session\Store)[255] 3 protected 'id' => string '0yzP6rL3No9wxesMPpY95aIeXY4a8ytRrrdMBNi2' (length=40) 4 protected 'name' => string 'laravel_session' (length=15) 5 protected 'attributes' => 6 array (size=4) 7 '_token' => string '7v4Y1RGdBVFRf1I25fZehR51TIBtdEvhOb1GKHAF' (length=40) 8 '_previous' => 9 array (size=1) 10 'url' => string 'http://hugohugohugooon.kp/mapopo/public/login' (length=42) 11 '_flash' => 12 array (size=2) 13 'old' => 14 array (size=0) 15 ... 16 'new' => 17 array (size=0) 18 ... 19 'PHPDEBUGBAR_STACK_DATA' => 20 array (size=0) 21 empty 22 protected 'bags' => 23 array (size=0) 24 empty 25 protected 'metaBag' => 26 object(Symfony\Component\HttpFoundation\Session\Storage\MetadataBag)[246] 27 private 'name' => string '__metadata' (length=10) 28 private 'storageKey' => string '_sf2_meta' (length=9) 29 protected 'meta' => 30 array (size=3) 31 'u' => int 1496657561 32 'c' => int 1496621391 33 'l' => string '0' (length=1) 34 private 'lastUsed' => int 1496656132 35 private 'updateThreshold' => int 0 36 protected 'bagData' => 37 array (size=1) 38 '_sf2_meta' => 39 array (size=3) 40 'u' => int 1496657561 41 'c' => int 1496621391 42 'l' => string '0' (length=1) 43 protected 'handler' => 44 object(Illuminate\Session\FileSessionHandler)[256] 45 protected 'files' => 46 object(Illuminate\Filesystem\Filesystem)[97] 47 protected 'path' => string '/var/www/htmm/mapopo/storage/framework/sessions' (length=48) 48 protected 'minutes' => int 120 49 protected 'started' => boolean true

Authが利用できず困っています。なんかすごい簡単そうだったんですが、ものすごいはまってます。
誰か分かる方助けてくださいorz.....

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

少し確認してみたのですが、Illuminate\Contracts\Session\SessionインターフェースはLaravel5.4から追加されています。
https://github.com/laravel/framework/commits/5.4/src/Illuminate/Contracts/Session/Session.php

また、Laravel5.3.31のSessionGuardのコンストラクタは以下のようになってました。
https://github.com/laravel/framework/blob/v5.3.31/src/Illuminate/Auth/SessionGuard.php#L97

public function __construct($name, UserProvider $provider, SessionInterface $session, Request $request = null) {

考えられるとすれば、Laravelのバージョンを上げてしまった可能性があります。
現在使っているバージョンが本当に5.3.31なのか、composer.lockの中身などから確認できますか・・・?

投稿2017/06/06 10:02

fagai

総合スコア2158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wasi300

2017/06/06 13:51

ファガイ様、ご回答ありがとうございます。 そして、5.3のコードをご確認頂いた上でご教示頂きありがとうございます。 composer.lockのLaravelに関係のありそうな箇所にはこのように記載されています。 "name": "laravel/framework", "version": "v5.3.31", しかし、そのメソッドは、上書きしたりしていたので、そこだけ変更されていたかもしれません…。 現在は、Laravelを5.4で再度アプリを作成しなおした結果、Auth使ってもエラーがでなくなりました。 Auth::attempt(array)でログインが可能になりました。ただ、Auth::login()でログインが本当はしたいです。Auth::loginでのログイン方法は、Model::find()で引いたレコードのオブジェクトを引数に充てれば認証ができるのでしょうか。 スレッドを立てた質問の趣旨とは違って申し訳ないのですが、教えて頂けないでしょうか。
fagai

2017/06/06 14:24

基本的にはAuth::attemptを使うのが面倒ではないですが、loginの場合はそうですね。 ただマニュアルにもある通り、Illuminate\Contracts\Auth\Authenticatableを実装している必要があります。確か最初に作られているUserクラスはすでに実装されていたと思うので関係はないかと思いますが一応。
wasi300

2017/06/07 07:41

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問