1

我正在使用简单的 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

我认为这是因为LumenLaravel的一个较小版本,也许这个功能还没有实现。

4

3 回答 3

5

我通过稍微调整中间件以及在会话中存储 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的人,顺便说一下,这是一个很棒的框架。:)

于 2015-05-04T16:02:57.937 回答
2

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

您的选择是:

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

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

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

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

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

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

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

然后重定向到请求的 URI:

return redirect($uri);

这可以工作!

于 2015-04-30T09:37:52.977 回答