我确信在 Laravel 中有一个有据可查的方法来做到这一点,我只是想念它或者不明白我在读什么。我有一个应用程序使用令牌来访问网站的一部分,而不是用户名或密码。该令牌识别作业,检查作业状态,然后将用户重定向到适当的页面。
到目前为止,这就是我在 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);
}
我有一种感觉,我可以使用这个中间件来实现我需要做的事情,但我不确定如何继续,或者即使我在正确的轨道上。有人可以解释一下我需要使用什么来满足我的要求吗?