laravel 未在预期页面上重定向的 auth 中间件
laravel auth middleware not redirectly on intended page
我正在使用 hesto/multi-auth 套餐
默认情况下,如果我已将 auth 中间件分配给路由,那么在登录后它应该将我重定向回预期的页面,但它只是第一次做..
一切正常我只想要第一次但是一旦我注销并再次尝试访问路由它确实会转到登录页面而不是重定向到 user/home 但第一次它完美无缺看到40秒视频
http://neelnetworks.org/video/laravel.mp4
有什么解决办法吗?
这些是我的网络路由
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";
}
}
第一次完美运行为什么我们登录一次后就不行了?
如果我清除所有缓存和 cookie,它会再次运行,这是默认行为还是 laravel 中的错误?你能澄清一下吗?还是包裹有问题
问题已在 github https://github.com/Hesto/multi-auth/issues/46
中提出
登录后 laravel 的默认重定向是转到 LoginController 中设置的 /home:
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
并且有默认的中间件 RedirectIfAuthenticated
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);
}
}
我正在使用 hesto/multi-auth 套餐
默认情况下,如果我已将 auth 中间件分配给路由,那么在登录后它应该将我重定向回预期的页面,但它只是第一次做..
一切正常我只想要第一次但是一旦我注销并再次尝试访问路由它确实会转到登录页面而不是重定向到 user/home 但第一次它完美无缺看到40秒视频 http://neelnetworks.org/video/laravel.mp4 有什么解决办法吗?
这些是我的网络路由
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";
}
}
第一次完美运行为什么我们登录一次后就不行了?
如果我清除所有缓存和 cookie,它会再次运行,这是默认行为还是 laravel 中的错误?你能澄清一下吗?还是包裹有问题
问题已在 github https://github.com/Hesto/multi-auth/issues/46
中提出登录后 laravel 的默认重定向是转到 LoginController 中设置的 /home:
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
并且有默认的中间件 RedirectIfAuthenticated
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);
}
}