Laravelでこれを行うための十分に文書化された方法があると確信しています.私はそれを見逃しているか、読んでいるものを理解していません. ユーザー名やパスワードではなく、トークンを使用して Web サイトの一部にアクセスするアプリケーションがあります。そのトークンはジョブを識別し、ジョブのステータスを確認してから、ユーザーを適切なページにリダイレクトします。
これは、これまでのroutes.phpファイルにあるものです。
$router->pattern('token', '[A-Za-z0-9]{32}');
$router->pattern('id', '[0-9]{1,11}');
Route::group(['prefix' => '{token}', 'middleware' => 'token'], function()
{
Route::get('/', 'RedirectController@index');
Route::get('/first-steps', ['as' => 'firstSteps', 'uses' => 'FirstStepsController@index']);
Route::get('/first-steps/form', ['as' => 'firstStepsForm', 'uses' => 'FirstStepsController@form']);
Route::post('/first-steps/form', 'FirstStepsController@processForm');
Route::get('/designs', ['as' => 'designs', 'uses' => 'DesignsController@index']);
Route::get('/designs/{id}', ['as' => 'designShow', 'users' => 'DesignsController@show']);
});
関係のない他のいくつかのルートがあります。ユーザーがリンクにアクセスするRedirectController@index
と、ジョブのステージがチェックされ、正しい URL (現在/first-steps
はステージ 1 と/designs
ステージ 2) にリダイレクトされます。問題は、ユーザーが などのページをブックマークした/first-steps
場合、プロジェクトがステージ 2 に移行しても、ユーザーはまだステージ 1 のページにアクセスできることです。ジョブが存在するステージの正しい URL にアクセスしていることを確認し、必要に応じてリダイレクトしてジョブ (雄弁なオブジェクト) をクラス(または呼び出されたメソッドに注入)。
コントローラーでメソッドを作成しようとしましたbefore
が、呼び出されません:
public function before(Request $request, $token)
{
$this->website = Website::where('access_token', '=', $token)->firstOrFail();
}
ルーターでわかるように、トークンを検証するカスタム ミドルウェアがあります。これはそのミドルウェアのコードです:
public function handle($request, Closure $next)
{
if ( ! Website::where('access_token', '=', $request->route()->parameter('token'))->count())
{
return response('Invalid token.', 401);
}
return $next($request);
}
このミドルウェアを使用して必要なことを達成できると感じていますが、どのように進めればよいのか、あるいは正しい軌道に乗っているのかさえわかりません。誰かが私の要件を達成するために何を使用する必要があるか説明してもらえますか?