我有/signup/select-plan
允许用户选择计划,/signup/tos
显示服务条款。我希望只能从/signup/tos
访问/signup/select-plan
。因此,如果我尝试直接转到/signup/tos
而不选择计划,我希望它不允许它。我该怎么做?
答案 0 :(得分:0)
在/signup/tos
的控制器中返回tos视图,只需添加以下代码:
$referer = Request::referer();
// or
// $referer = Request::server('HTTP_REFERER');
if (strpos($referer,'signup/select-plan') !== false) {
//SHOW THE PAGE
}
else
{
dd("YOU ARE NOT ALLOWED")
}
我们在这里做的是检查HTTP引荐来源并仅在用户来自select-plan时才允许页面访问
答案 1 :(得分:0)
在构造函数或路由中(如果您不使用构造函数),可以使用全局帮助程序url()
检查以前的URL。
public function tos() {
if ( !request()->is('signup/tos') && url()->previous() != url('signup/select-plan') ) {
return redirect()->to('/'); //Send them somewhere else
}
}
答案 2 :(得分:0)
你需要参加laravel课程。您可以查看以下文档以获取更多信息:Laravel Sessions
首先,您需要配置您希望拥有会话变量的时间,以便您可以转到目录config/sessions.php
,然后您可以编辑字段'lifetime' => 120,
,也可以设置expire_on_close
1}}默认情况下,它被设置为false。
现在您可以拥有以下路线:
Route::get('signup/select-plan', 'SignupController@selectPlan');
Route::post('signup/select-token', 'SignupController@selectToken');
Route::get('signup/tos', 'SignupController@tos');
Route::get('registered', 'SignupController@registered');
现在,在您的Signupcontroller
中,您可以拥有以下内容:
public function selectPlan()
{
// return your views/form...
}
public function selectToken(Request $request)
{
$request->session()->put('select_plan_token', 'value');
return redirect('/signup/tos');
}
现在在signupController
tos
函数中,您可以随时检查会话值并相应地操作数据
public function tos()
{
$value = $request->session()->get('select_plan_token');
// to your manipulation or show the view.
}
现在,如果用户已注册且您不需要会话值,则可以通过以下方式删除:
public function registered()
{
$request->session()->forget('select_plan_token');
// Return welcome screen or dashboard..
}
此方法将从会话中删除数据。你可以操纵它。当您刷新页面并且希望数据保持不变时,您将无法在tos
函数中使用。因此,最后一步或执行nextstep时最好将其删除。希望这会有所帮助。
注意:这只是参考资料,请仔细阅读文档以获取更多信息并进行相应的实施。