2

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);
}

このミドルウェアを使用して必要なことを達成できると感じていますが、どのように進めればよいのか、あるいは正しい軌道に乗っているのかさえわかりません。誰かが私の要件を達成するために何を使用する必要があるか説明してもらえますか?

4

1 に答える 1

4

ミドルウェアはオプションかもしれません。

または、BaseController のコンストラクターでこれを行うことができますか?

例えば

class BaseController extends Controller {

    public function __construct()
    {
         //if token in query string
         //load Job and check status Vs requested URL
         //redirect to correct URL
    }
}
于 2015-06-22T12:50:52.883 に答える