laravel身份验证中间件未在预期页面上重定向
我正在使用hesto/multi auth软件包 默认情况下,如果我已将auth中间件分配给路由,那么在登录后,它应该将我重定向回预期页面,但这只是第一次 一切正常我只想第一次,但一旦我注销并尝试再次访问路由,它确实会转到登录页面,然后重定向到用户/主页,但第一次它工作正常,请参阅40秒视频 有什么解决办法吗 这些是我的网络路线laravel身份验证中间件未在预期页面上重定向,laravel,laravel-5.3,Laravel,Laravel 5.3,我正在使用hesto/multi auth软件包 默认情况下,如果我已将auth中间件分配给路由,那么在登录后,它应该将我重定向回预期页面,但这只是第一次 一切正常我只想第一次,但一旦我注销并尝试再次访问路由,它确实会转到登录页面,然后重定向到用户/主页,但第一次它工作正常,请参阅40秒视频 有什么解决办法吗 这些是我的网络路线 Route::get('/', 'PagesController@getIndex')->middleware('user'); Route::group(['
Route::get('/', 'PagesController@getIndex')->middleware('user');
Route::group(['prefix' => 'user'], function () {
Route::get('/login', 'UserAuth\LoginController@showLoginForm');
Route::post('/login', 'UserAuth\LoginController@login');
Route::post('/logout', 'UserAuth\LoginController@logout');
Route::get('/register', 'UserAuth\RegisterController@showRegistrationForm');
Route::post('/register', 'UserAuth\RegisterController@register');
Route::post('/password/email', 'UserAuth\ForgotPasswordController@sendResetLinkEmail');
Route::post('/password/reset', 'UserAuth\ResetPasswordController@reset');
Route::get('/password/reset', 'UserAuth\ForgotPasswordController@showLinkRequestForm');
Route::get('/password/reset/{token}', 'UserAuth\ResetPasswordController@showResetForm');
});
这是我的网页控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PagesController extends Controller
{
public function getIndex()
{
return "hello";
}
}
登录后laravel的默认重定向是转到LoginController中的/home设置:
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
并且存在默认的中间件重定向身份验证
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
}
在app/Http/Controllers/Auth/RegisterController.php中
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after login / registration.
*
* @var string
*/
protected $redirectTo = '/home';
因此,为了按照自己的方式工作,您需要在这里进行更改。在UserAuth/LoginController.php中使用类似的showLoginForm方法
public function showLoginForm()
{
session()->put('url.intended',url()->previous());
return view('user.auth.login');
}
因为在将表单发布到/user/login时,它会更改以前的url,如果您在进行了大量挖掘之后登录,您将被重定向到/user/home,我找到了正确的解决方案 在RedirectIfNot{guard name}中,例如RedirectIfNotAdmin 我们需要加上这一行
session()->put('url.intended', url()->current());
因此,中间件将如下所示
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfNotAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $guard = 'admin')
{
if (!Auth::guard($guard)->check()) {
session()->put('url.intended', url()->current());
return redirect('/admin/login');
}
return $next($request);
}
}
我想你无法理解我的问题。。转到这个链接,试着理解我想说的,正如我现在理解的,你没有使用普通的Laravel,这是一些外部“插件”?是的,这是一个Laravel软件包来调试你的会话。很可能laravel在“预定”中存储了一条特定路线。这不会存储在初始登录/设置时。但在您登录一次之后,它可能会在您的会话中。如果你把所有东西都扔掉,你应该能看到它。试着找出我们的“意图”中是否有值,如果有,试着找出它的设置位置。我在会话中找不到任何变量集,唯一能找到的是cookies XSRF-TOKEN和laravel_会话。除此之外,会话仍然为空亲爱的谢谢。。它工作得很好,但我还必须删除$redirectTo变量才能工作。。非常感谢,很高兴它有帮助!