重定向到预期的 URL 流明

Posted

技术标签:

【中文标题】重定向到预期的 URL 流明【英文标题】:Redirect to intended URL Lumen 【发布时间】:2015-07-09 21:34:21 【问题描述】:

我正在使用简单的 API 和身份验证构建一个小的 Lumen 应用程序。

我想将用户重定向到预期的 URL,如果他自己访问 /auth/login,我希望他重定向到 /foo

在Laravel Docs中有这个函数:return redirect()->intended('/foo');

当我在路由中使用它时,我在服务器日志中收到一条错误消息:

[30-Apr-2015 08:39:47 UTC] php Fatal error:  Call to undefined method Laravel\Lumen\Http\Redirector::intended() in ~/Sites/lumen-test/app/Http/routes.php on line 16

我认为这是因为Lumen 是Laravel 的更小版本,并且可能还没有实现这个功能。

【问题讨论】:

也许你可以使用命名路由:lumen.laravel.com/docs/routing#named-routes 问题是,tented() 方法在 Lumen 中不起作用:/ 【参考方案1】:

我认为您必须在预期的方法中指定路由名称,而不是 URI:

return redirect()->intended('foo');

假设您已经命名了路线,我认为这仍然有效:

return Redirect::intended('/foo');

更新: 尝试这个: 检索请求的 URI:

$uri = Request::path(); // Implemented in Lumen

然后重定向到请求的 URI:

return redirect($uri);

这可以工作!

【讨论】:

不幸的是,这不起作用,我已经尝试过这种方式解决问题。 试试 Request::path();【参考方案2】:

确实查看了 Lumen 的源代码,它没有实现: https://github.com/laravel/lumen-framework/blob/5.0/src/Http/Redirector.php

您的选择是:

    检查 Laravel(Symfony 的?)实现并将其放入您自己的代码中 完全编写您自己的实现 - 一种超级简单的方法是将请求 URL 存储在会话中,重定向到登录页面,当用户成功登录时,从会话中检索 URL 并重定向他

【讨论】:

谢谢,我已经想到了,但我想在我自己做之前确定它没有实现。 :)【参考方案3】:

我通过稍微调整中间件以及在会话中存储 Request::path() 解决了这个问题。

这就是我的中间件的样子:

class AuthMiddleware 

    public function handle($request, Closure $next) 
        if(Auth::check())
            return $next($request);
         else 
            session(['path' => Request::path()]);
            return redirect('/auth/login');
        
    

在我的 routes.php 中有这条路线(我将尽快外包给控制器)​​:

$app->post('/auth/login', function(Request $request) 
    if (Auth::attempt($request->only('username', 'password')))
        if($path = session('path'))
            return redirect($path);
         else 
            return redirect('/messages');
        
     else 
        return redirect()->back()->with("error", "Login failed!");
    
);

感谢 IDIR FETT 提出 Request::path() 方法。 希望这能帮助一些刚接触的人 Lumen,顺便说一句,这是一个很棒的框架。 :)

【讨论】:

您可以避免使用 Facades,方法是使用 $request->path() 表示请求并在您的构造函数中:public function __construct(Guard $auth) $this->auth = $auth; 表示 Auth。

以上是关于重定向到预期的 URL 流明的主要内容,如果未能解决你的问题,请参考以下文章

使用参数流明重定向

允许重定向到不在 htdocs 中的 URL (XAMPP)

mod_rewrite重定向无法按预期工作

laravel 5.2 登录后重定向到预期的网址

如何在 java Servlet 过滤器中更改传入 URL 并将请求重定向到新 URL [重复]

Web.config:使用尾部斜杠将URL输入重定向到URL而不使用尾部斜杠