開発ではなく、本番環境でのみ発生する奇妙な問題を見つけています。私の Laravel 開発環境は Homestead を使用し、本番環境は Forge であるため、両方の環境は (.env 値を除いて) 同一である必要があります。
Laravel 5.2 の認証を使用しており、RegistersUsers.php ファイルの register メソッドを変更しました。これは、新しいユーザーを作成した直後にユーザーをログインさせたくないためです。代わりに、メールをチェックするための静的ビューを表示する新しいルートにリダイレクトします。本番環境でのみ、登録フォームを送信したときに次のエラーが発生します。このエラーは、/verify へのリダイレクトに関連しています。dev では、送信してデータベースに新しいユーザーを作成し、期待どおりに /verify にリダイレクトします。
public function register(Request $request)
{
$validator = $this->validator($request->all());
if ($validator->fails()) {
$this->throwValidationException(
$request, $validator
);
}
// Auth::guard($this->getGuard())->login($this->create($request->all()));
$this->create($request->all());
return redirect('/verify');
// return redirect($this->redirectPath());
}
このリダイレクトは次のようにルーティングされ、静的な HTML を表示するだけです。
Route::get('/verify', function () {return view('verify');});
なんらかの奇妙な理由で、本番環境で登録フォームを送信すると、次のエラーが返されます (いくつかのスタック トレース メッセージと共に)。
2016-02-23 11:23:08] production.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given, called in /home/forge/mysite.com/bootstrap/cache/compiled.php on line 2542 in /home/forge/mysite.com/bootstrap/cache/compiled.php:628 Stack trace:
#0 /home/forge/mysite.com/bootstrap/cache/compiled.php(2542): Illuminate\Auth\SessionGuard->login(NULL)
#1 [internal function]: App\Http\Controllers\Auth\AuthController->register(Object(Illuminate\Http\Request))
#2 /home/forge/mysite.com/bootstrap/cache/compiled.php(9224): call_user_func_array(Array, Array)
#3 /home/forge/mysite.com/bootstrap/cache/compiled.php(9286): Illuminate\Routing\Controller->callAction('register', Array)
#4 /home/forge/mysite.com/bootstrap/cache/compiled.php(9266): Illuminate\Routing\ControllerDispatcher->call(Object(App\Http\Controllers\Auth\AuthController), Object(Illuminate\Routing\Route), 'register')
#5 [internal function]: Illuminate\Routing\ControllerDispatcher->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#6 /home/forge/mysite.com/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#7 /home/forge/mysite.com/app/Http/Middleware/RedirectIfAuthenticated.php(24): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#8 [internal function]: App\Http\Middleware\RedirectIfAuthenticated->handle(Object(Illuminate\Http\Request), Object(Closure))
#9 /home/forge/mysite.com/bootstrap/cache/compiled.php(9753): call_user_func_array(Array, Array)
#10 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#11 /home/forge/mysite.com/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#12 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#13 /home/forge/mysite.com/bootstrap/cache/compiled.php(9743): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#14 /home/forge/mysite.com/bootstrap/cache/compiled.php(9267): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#15 /home/forge/mysite.com/bootstrap/cache/compiled.php(9254): Illuminate\Routing\ControllerDispatcher->callWithinStack(Object(App\Http\Controllers\Auth\AuthController), Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'register')
上流に泳いでこのスタック トレースを追跡することに関しては、私は専門家ではないので、この製品エラーをどのようにデバッグすればよいかについての指針をいただければ幸いです。スタック トレース #8 から、RedirectIfAuthenticated ミドルウェアが呼び出されているように見えますが、ユーザーのログインを試みていないため、これが必要かどうかはわかりません。
#8 [internal function]: App\Http\Middleware\RedirectIfAuthenticated->handle(Object(Illuminate\Http\Request), Object(Closure))