我请求api检查用户,并且backurl将添加一个查询参数 令牌,如下所示:
www.test.com?store_id=2&token = 123
Run Code Online (Sandbox Code Playgroud)
我想展示这个
www.test.com?store_id=2
Run Code Online (Sandbox Code Playgroud)
我在中间件中处理它,我希望以前有个方法可以删除令牌 ,return $next($request)
但是我没有找到方法。而且我不能只使用某种方法来删除此参数并重定向,这将导致重定向循环。如果没有更好的方法,也许我将在LoginController中创建一个新方法以删除令牌并重定向到我来自的页面。
您可以使用某种全球中间件:
class RedirectIfTokenInRequest {
public function handle($request,$next) {
if ($request->token) {
return redirect()->to(url()->current().'?'.http_build_query($request->except("token")));
}
return $next($request);
}
}
Run Code Online (Sandbox Code Playgroud)
如果那里有一个令牌参数,它将只是重定向。如果您需要以某种方式存储它,则可以session(["token" => $request->token]);在重定向之前使用它来存储它。
中间件是最好的选择。您可以将中间件类附加到路由、Web 或单个方法。我的中间件建议:
namespace App\Http\Middleware;
use Closure;
class ClearFromAttributes
{
/**
* Remove some attributes which makes some confusion.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->get('unwanted_param')) {
return $this->removeFromQueryAndRedirect($request, 'unwanted_param');
}
if ($request->has('second_unwanted')) {
return $this->removeFromQueryAndRedirect($request, 'second_unwanted');
}
return $next($request);
}
/**
* Remove and make redirection.
*
* @param \Illuminate\Http\Request $request
* @param string $parameter
* @return mixed
*/
public function removeFromQueryAndRedirect($request, string $parameter)
{
$request->query->remove($parameter);
return redirect()->to($request->fullUrlWithQuery([]));
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我在handle方法上有更复杂的条件,在现实中。
在不接触内核文件的情况下在控制器构造函数中使用:
$this->middleware(ClearFromAttributes::class)->only('index');
Run Code Online (Sandbox Code Playgroud)
这是一个不错的选择,适合单次使用。
拉拉维尔 7
您可以通过将 null 传递给函数来从 url 中删除参数,fullUrlWithQuery如下所示:
request()->fullUrlWithQuery(['token ' => null])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3725 次 |
| 最近记录: |