问题描述
我正在尝试为一个简单的站点设置一个年龄门卫。它由三页组成:年龄,无效年龄和住所。用户只需单击一个按钮即可确认自己的年龄-在验证之前,他们无法访问除年龄门页面之外的任何其他页面。这是在web.PHP
中设置路由的方式:
Route::get('/','HomeController@age')->name('public.home.age');
Route::get('/invalid-age','HomeController@invalidAge')->name('public.home.invalid-age');
Route::get('/home','HomeController@index')->name('public.home.index');
在HomeController中,我具有以下功能设置:
public function __construct() {
//$this->middleware('auth');
$this->middleware('web');
//$request->session()->put('ageVerified','value');
$this->middleware('verifyAge')->except('age'); //except points to the verifyAge function in this controller
}
public function index() {
return view('public.home.index');
}
public function age() {
return view('public.home.age');
}
public function invalidAge() {
return view('public.home.invalid-age');
}
//if the user clicks the over 21 button call this to set the session variable to true and go to the home page
public function verifyAge(Request $request) {
$request->session()->put('ageVerified',true);
return view('public.home.index');
}
要处理重定向以检查用户是否已验证年龄,我正在使用自定义中间件VerifyAge
创建一个会话变量,该变量将跟踪用户单击以访问的当前会话验证他们的年龄。如果是true
,请让用户转到主页;如果是false
,则将他们重定向到年龄门页面:
public function handle($request,Closure $next) {
if ($request->session()->get('ageVerified',false) == true) {
//return view('public.home.age');
//return redirect('age');
return redirect()->route('public.home.index');
//response()->view('age');
}
//return view('public.home.invalid-age');
return redirect()->route('public.home.age');
//return $next($request);
}
然后在age-gate页面上,我有两个按钮,一个按钮不够旧,另一个按钮授予访问权限,这将调用verifyAge
函数将会话变量设置为true
并转到主页。
<a name="submit" class="access-btn-no ml-3" href="{{ route('public.home.invalid-age') }}">No,I'm under 21</a>
<a name="submit" class="access-btn-yes" href="{{ action('HomeController@verifyAge') }}">Yes,I'm over 21</a>
我遇到的一个错误是它找不到verifyAge
。如果我只用到首页的路线替换了“是...”按钮中的操作,那么无论单击哪个按钮,我似乎都会卡在年龄页面上。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)