欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

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

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

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

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

        return $next($request);
    }
       
  •  

2015-11-23 提问                

查看全部 3 个回答    

0

分两种情况:
一、访问受限的(即需要经过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>
           

推荐答案

1

已采纳                

这样看看?

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

        return $next($request);
    }
               

来自  https://segmentfault.com/q/1010000004031765/a-1020000006669799

普通分类: