为了实现在登出后,再次登录时跳转到之前登录前的页面,我们可以使用Laravel的session和middleware功能来实现。
首先,我们需要在用户进行登录操作时记录当前的访问路径:
public function login(Request $request)
{
// 登录操作
// ...
// 记录当前访问路径
session(['pre_login_path' => $request->header('referer')]);
}
这里使用session()
函数将请求头中的referer
存储到session中,并将其键名设置为pre_login_path
。
然后,我们需要创建一个middleware来实现在登录后跳转到之前记录的访问路径:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Redirect;
class RedirectIfAuthenticated
{
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
if (session()->has('pre_login_path')) {
$path = session('pre_login_path');
session()->forget('pre_login_path');
return Redirect::to($path);
} else {
return redirect('/home'); // 默认跳转路径
}
}
return $next($request);
}
}
这里使用了PHP中的header()
函数,将跳转路径设置为之前记录的访问路径,跳转完成后再从session中删除这个路径。
最后,在Kernel.php
文件的$routeMiddleware
数组中添加刚才创建的middleware:
'auth.redirect' => \App\Http\Middleware\RedirectIfAuthenticated::class,
然后在web.php
文件中将默认的auth
middleware替换为刚才创建的auth.redirect
中间件即可:
Route::middleware(['auth.redirect'])->group(function () {
// 这里是需要登录后才能访问的路由
// ...
});
示例1:跳转到登录前的页面
例如,在用户访问/user
页面时,若用户未登录,则会跳转到登录页面并记录/user
路径。之后用户进行登录操作后,会自动跳转回这个路径。
示例2:重定向到home页面
在用户访问/home
页面时如果未登录,则会跳转到登录页面。当用户登录后,如果之前没有记录过访问路径,则会跳转到默认的/home
路径。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Laravel 5.4重新登录实现跳转到登录前页面的原理和方法 - Python技术站