我有这条路线:
Route::group(['prefix' => '', 'middleware' => 'auth'], function(){
Route::get('/congress/create', [
'uses' => 'CongressController@create',
'as' => 'congress.create'
]);
}
当用户访问此网址时:
<li><a href="{!! route('congress.create') !!}"> Create Congress </a></li>
用户转到&#34; http://project.test/login&#34;,因为需要对用户进行身份验证才能访问congressc reate页面。用户通过身份验证后,会被重定向到&#34; http://project.test/congress/create&#34;。所以这部分工作正常。
问题:
但是我有一个链接,所以用户可以访问会议详细信息页面:
<a href="{{route('congress.show', ['id' => $congress->id, 'slug' => $congress->slug])}}">More congress details</a>
用户可以访问会议详细信息页面&#34; http://project.test/congress/1/congress-test&#34;没有经过身份验证。路线是:
Route::get('/congress/{id}/{slug?}', [
'uses' => 'FrontController@show',
'as' =>'congresses.show'
]);
然后在会议详情页面中有一个包含此路线的表格:
<form method="post" action="{{route('congresses.registration', ['id' => $congress->id, 'slug' => $congress->slug])}}">
此表格的路线:
Route::post('/congress/{id}/{slug?}/registration', [
'uses' => 'RegistrationController@storeQuantity',
'as' =>'congresses.registration'
]);
在storeQuantity方法中,用户为每个国会票据类型存储选定的数量,然后用户被重定向到注册页面:
return view('congresses.registration')->with('selectedRtypes', $selectedRtypes)
;
因此,当用户提交表单时,他会转到&#34; http://project.test/event/1/congress-test/registration&#34;。在此页面中,如果用户未经过身份验证,则会显示以下消息:
@if(!\Auth::check())
<div class="alert alert-info" role="alert">
<span>
Already have an account?
<a data-toggle="modal"
data-target=".bd-example-modal-lg"
href="">Login.</a>
</span>
</div>
@endif
如果用户点击登录,它会显示一个模态,因此用户可以插入电子邮件和密码,如果成功登录,模式应该关闭,他应该被重定向到同一个注册页面。
问题:问题是如果用户在此页面中成功登录&#34; http://project.test/congress/1/congress-test/registration&#34;在模态中,他被重定向到&#34;创建大会&#34;页面(&#34; http://project.test/congress/create&#34;)而不是留在注册页面(&#34; http://project.test/congress/1/congress-test/registration&#34;)。你知道如何纠正这个问题吗?
的LoginController:
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/home';
public function __construct()
{
$this->middleware('guest')->except('logout');
}
protected function authenticated(Request $request, $user)
{
return redirect()->intended($this->redirectTo);
}
}
答案 0 :(得分:1)
将路线Route::post('/congress/{id}/{slug?}/registration')
置于Route::get('/congress/{id}/{slug?}')
当您使用模式登录时,基础页面保持“静态”。它可能包含“旧”信息。如果您向authenticated
函数添加条件,检查路由是否等于'congresses.registration'
并手动设置$redirectTo
此页面,该怎么办?
作为旁注,最好不要在条件之后添加任何东西({slug?}),除非slug总是在那里。然后你也可以放下'?'。我知道这是一个GET和一个POST,所以可能没有混淆。通过在$reserved
中添加config/sluggable.php
数组,确保您的slug不能成为'registration'这个词。
答案 1 :(得分:1)
试试这个..
在经过身份验证的方法中,检查上一个请求网址是否等于路由(&#39; congresses.registration&#39;)。如果是,则重定向到路由(&#39; congresses.registration&#39;)和参数。
的LoginController:
use Illuminate\Support\Facades\Route;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/home';
public function __construct()
{
$this->middleware('guest')->except('logout');
}
protected function authenticated(Request $request, $user)
{
//check if the previous page route name is 'congresses.registration'
if(Route::getRoutes()->match(Request::create(\URL::previous()))->getName() == 'congresses.registration') {
//redirect to previous page with parameters
return redirect(Request::create(\URL::previous())->getRequestUri());
}
return redirect()->intended($this->redirectTo);
}
}
希望它有所帮助..让我知道结果..
参考here