在特定页面中登录后,将用户重定向到同一页面

时间:2018-04-11 16:12:17

标签: php laravel

我有这条路线:

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);

    }
}

上下文示例: enter image description here

2 个答案:

答案 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