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='登录成功后跳转的地址'
所以最后的解决方法:
新增方法
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>