Laravel允许只能从另一条路线访问路线

时间:2017-03-03 04:17:14

标签: php laravel laravel-routing laravel-5.4

我有/signup/select-plan允许用户选择计划,/signup/tos显示服务条款。我希望只能从/signup/tos访问/signup/select-plan。因此,如果我尝试直接转到/signup/tos而不选择计划,我希望它不允许它。我该怎么做?

3 个答案:

答案 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时最好将其删除。希望这会有所帮助。

注意:这只是参考资料,请仔细阅读文档以获取更多信息并进行相应的实施。