Laravel 允许只能从另一条路线访问路线
Laravel allow route to be accessible only from another route
我有 /signup/select-plan
可以让用户 select 制定计划,还有 /signup/tos
可以显示服务条款。我希望 /signup/tos
只能从 /signup/select-plan
访问。因此,如果我尝试在没有 select 计划的情况下直接进入 /signup/tos
,我希望它不允许。我该怎么做?
在 /signup/tos
的控制器中 returns 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
时才允许页面访问
在构造函数或路由中(如果您不使用构造函数),您可以使用全局助手 url()
检查前面的 URL。
public function tos() {
if ( !request()->is('signup/tos') && url()->previous() != url('signup/select-plan') ) {
return redirect()->to('/'); //Send them somewhere else
}
}
您需要 laravel 中的会话。您可以查看以下文档以获取更多信息:Laravel Sessions
首先你需要配置你想要会话变量的时间,这样你就可以进入你的目录config/sessions.php
并且你可以编辑字段'lifetime' => 120,
你也可以设置expire_on_close
默认设置为 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
函数中使用,因为您正在刷新页面并且希望数据保留。所以最好在执行最后一步或下一步时将其删除。希望这有帮助。
注意:这只是参考,请阅读文档以获取更多信息并相应地实施。
我有 /signup/select-plan
可以让用户 select 制定计划,还有 /signup/tos
可以显示服务条款。我希望 /signup/tos
只能从 /signup/select-plan
访问。因此,如果我尝试在没有 select 计划的情况下直接进入 /signup/tos
,我希望它不允许。我该怎么做?
在 /signup/tos
的控制器中 returns 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
时才允许页面访问在构造函数或路由中(如果您不使用构造函数),您可以使用全局助手 url()
检查前面的 URL。
public function tos() {
if ( !request()->is('signup/tos') && url()->previous() != url('signup/select-plan') ) {
return redirect()->to('/'); //Send them somewhere else
}
}
您需要 laravel 中的会话。您可以查看以下文档以获取更多信息:Laravel Sessions
首先你需要配置你想要会话变量的时间,这样你就可以进入你的目录config/sessions.php
并且你可以编辑字段'lifetime' => 120,
你也可以设置expire_on_close
默认设置为 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
函数中使用,因为您正在刷新页面并且希望数据保留。所以最好在执行最后一步或下一步时将其删除。希望这有帮助。
注意:这只是参考,请阅读文档以获取更多信息并相应地实施。