重定向到以前的 url,其他 url 除外

Posted

技术标签:

【中文标题】重定向到以前的 url,其他 url 除外【英文标题】:Redirect to previous url except in other urls 【发布时间】:2020-02-25 17:29:56 【问题描述】:

我想在用户登录时将用户重定向到以前的 url,除非用户单击重置密码。因此,如果用户单击重置密码然后尝试登录,则不应重定向回重置密码页面。到目前为止,当用户单击重置密码然后尝试登录时,我收到此错误The GET method is not supported for this route. Supported methods: POST.。我怎样才能重定向到以前的 url,除了(reset-password)之类的其他 url?

我已经尝试过这个session(['link' => url()->previous()])->except('password-reset');,但我收到了一个错误Call to a member function except() on null

登录控制器

 public function showLoginForm()
 
 session(['link' => url()->previous()]);
 return view('auth.login');
 

路线

 Route::post('password-reset', 'Auth\ForgotPasswordController@sendPasswordResetToken')->name('password.reset');

【问题讨论】:

猜猜这应该是session(['link' => url()->previous()->except('password-reset')]); ...? 我知道了Call to a member function except() on string@04FS 这只是基于语法的猜测,我不使用 Laravel。如果url()->previous() 返回一个字符串,那么尝试应用except 之类的收集方法没有多大意义。究竟是什么导致重定向发生在这里,它被放入名为link 的会话变量中?然后我猜你必须分配它,只有当前一个 URL 不是你的密码重置路由的那个时,检查使用字符串比较或 Laravel 可能为此提供的任何特定功能。 【参考方案1】:
$reset_route = route('password.reset');
$previous = url()->previous();
if(substr($previous, 0, strlen($reset_route)) !== $reset_route) 
    session(['link' => url()->previous()]);

else 
    session(['link' => route('other.route')]);

【讨论】:

你能说得更具体点吗?如果用户在输入密码后进入登录页面,$reset_route 和 $previous 的值是多少? $reset_route的值为"http://127.0.0.1:8000/reset-password"@geldek

以上是关于重定向到以前的 url,其他 url 除外的主要内容,如果未能解决你的问题,请参考以下文章

如何用 PHP 实现 302 重定向到其他 URL

如何重定向到Laravel 5.6中的以前的URL并打算使用

如何将用户重定向到以前的URL在Laravel中注册后

htaccess url重定向参数不起作用

利用tomecat的ROOT项目做一个url重定向

仅使用 URL 字符串确定 URL 是不是会将客户端重定向到其他 URL