重定向到以前的 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 除外的主要内容,如果未能解决你的问题,请参考以下文章