Laravel Sparkのログイン処理中に、リモートAPIのトークンを要求する必要があります。このAPIは、Laravel Sparkアプリケーションとまったく同じユーザーとパスワードを格納します。したがって、私は、認証プロセス中にユーザー名とハッシュされていないパスワードを取得する必要があります。独自の実装によるLaravel Spark認証を無効にすることはできません
私は認証されたメソッドをオーバーライドすることが私の問題の解決策になると考えました。ルート/ web.phpでは、私はPOST /login
エンドポイントをオーバーライドして、自分のLoginControllerにこのエンドポイントを指しています:
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
use Laravel\Spark\Http\Controllers\Auth\LoginController as SparkLoginController;
class LoginController extends SparkLoginController
{
/**
* Create a new login controller instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Handle a successful authentication attempt.
*
* @param Request $request
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @return Response
*/
public function authenticated(Request $request, $user)
{
Log::info('authenticated method in LoginController has been called');
return parent::authenticated($request, $user);
}
}
この実装はMissing argument 2 for App\Http\Controllers\Auth\LoginController::authenticated()
例外をスローします。何とかLaravelは$ userパラメータでUserを渡していません。この例外は、私が何をしてもスローされます。 LoginControllerからメソッドを削除しても、Spark LoginControllerにスローされたのと同じ例外が発生します。
私は私の/login
エンドポイントを無効にして、スパークLoginControllerで認証方法の$要求と$ユーザパラメータをログインすると、私は$要求がIlluminate\Http\Request::__set_state(array(...))
が含まれていると$ユーザーがApp\User::__set_state(array())
が含まれていることを参照してください。自分自身のコントローラで同じものを記録すると、$ requestにはIlluminate\Http\Request::__set_state(array(...))
が含まれ、$ userは渡されません。