laravel5 登录如何跳转到登录前的页面?

ty0716
  • 208

登录后都是跳转后/home,如何跳转到上一页(登录前的页面)/(没有登录前页面才跳转到home)?

每次都是跳转到home这样不是很好,用户还等去倒退或者是历史记录找之前的页面

public function handle($request, Closure $next)
    {
        if ($this->auth->check()) {
            return redirect('/home');
        }

        return $next($request);
    }
回复
阅读 10.1k
3 个回答
✓ 已被采纳

这样看看?

public function handle($request, Closure $next)
    {
        if ($this->auth->check()) {
            return Redirect::intended('/');
            //return redirect('/home');
        }

        return $next($request);
    }
public function handle($request, Closure $next)
    {
        if ($this->auth->check()) {
            //跳转到/home页
            return redirect('/home');
            
            //登录成功后跳转登录前的那页,但一般我不这么用根据情况使用
            return redirect()->back();
            
            //我一般使用这个,成功后登录我想使用的控制器
            return redirect()->action('IndexController@index');
        }

        return $next($request);
    }

分两种情况:
一、访问受限的(即需要经过auth中间件),如:

// 注册登录
Route::group(['middleware' => 'auth', 'namespace' => 'Admin', 'prefix' => 'admin'], function() {
    Route::get('/', 'HomeController@index');
});

二、普通的,不需要登录即可访问的。如:

// 活动主页
Route::get('/activity/{id}/{privateHash?}', 'ActivityController@show');

针对第一种,什么都不用做,Laravel 5.1 auth已经做了。核心点:我猜测访问受限的,它自动调用了guest()方法

vendor\laravel\framework\src\Illuminate\Routing\Redirector.php

虽然我没有做代码测试,但做过功能测试:没有登录状态下,访问/admin,然后跳转到登录界面,登录成功后,自动跳转到/admin。
针对第二种,由于是不用登录即可访问的,它没有调用gest()方法,自然不会执行:

$this->session->put('url.intended', $this->generator->full());

再查看:登录成功之后会做什么

vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php

中的handleUserWasAuthenticated()方法
核心点:

return redirect()->intended($this->redirectPath());

仿照guest()方法,只要在session中设置url.intended='登录成功后跳转的地址'

所以最后的解决方法:
新增方法

    // 文件:app\Http\Controllers\Auth\AuthController.php
    /**
     * Show the application login form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showLoginForm(Request $request)
    {
        if (!empty($request->get('redirectUrl'))) { // 如果有跳转地址的话
            session(['url.intended' => $request->get('redirectUrl')]);
        }

        $view = property_exists($this, 'loginView')
                    ? $this->loginView : 'auth.authenticate';

        if (view()->exists($view)) {
            return view($view);
        }

        return view('auth.login');
    }

普通模板文件

<a class="btn btn-info" href="{{ url('login').'?redirectUrl='.url()->full() }}">登录</a>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏