Laravel在登录后重定向回原始目的地

这看起来像一个相当基本的流程,Laravel有这么多好的解决方案的基本的东西,我觉得我错过了一些东西。

用户单击需要身份验证的链接。 Laravel的验证过滤器启动并将它们路由到登录页面。用户登录,然后转到他们尝试在“auth”过滤器启动之前访问的原始页面。

有没有一个好的方法来知道他们最初想要得到什么页面?由于Laravel是拦截请求的人,我不知道它是否跟踪某个地方,以便在用户登录后方便路由。

如果没有,我很想知道你们中有些人是如何手动实现的。

对于Laravel 5(更新答案)

简单的说,

在auth中间件:

// redirect the user to "/login"
// and stores the url being accessed on session
if (Auth::guest()) {
    return redirect()->guest('login');
}
return $next($request);

登录操作:

// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
    return redirect()->intended('defaultpage');
}

对于Laravel 4(老答案)

在这个答案的时候,没有框架本身的官方支持。现在你可以使用bgdrl下面的方法指出的方法:(我试过更新他的答案,但似乎他不会接受)

验证过滤器:

// redirect the user to "/login"
// and stores the url being accessed on session
Route::filter('auth', function() {
    if (Auth::guest()) {
        return Redirect::guest('login');
    }
});

登录操作:

// redirect the user back to the intended page
// or defaultpage if there isn't one
if (Auth::attempt(['email' => $email, 'password' => $password])) {
    return Redirect::intended('defaultpage');
}

对于Laravel 3(更老的答案)

你可以这样实现:

Route::filter('auth', function() {
    // If there's no user authenticated session
    if (Auth::guest()) {
        // Stores current url on session and redirect to login page
        Session::put('redirect', URL::full());
        return Redirect::to('/login');
    }
    if ($redirect = Session::get('redirect')) {
        Session::forget('redirect');
        return Redirect::to($redirect);
    }
});
// on controller
public function get_login()
{
    $this->layout->nest('content', 'auth.login'); 
}

public function post_login()
{
    $credentials = [
        'username' => Input::get('email'),
        'password' => Input::get('password')
    ];

    if (Auth::attempt($credentials)) {
        return Redirect::to('logged_in_homepage_here');
    }

    return Redirect::to('login')->with_input();
}

将重定向存储在Session上具有持久化的优点,即使用户错过键入其凭据或他没有帐户并且必须注册。

这也允许除了Auth之外的任何东西在会话上设置重定向,它将工作神奇。

http://stackoverflow.com/questions/15389833/laravel-redirect-back-to-original-destination-after-login

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Laravel在登录后重定向回原始目的地