嗨,我正在尝试遵循laravel multi auth示例,如下所示: 我正在使用laravel 5.6,我认为开发市场人员正在使用5.2。 https://www.youtube.com/watch?v=Ir2nAD9UDGg&t=1930s 所以我的管理员如下:
问题是,如果我去:localhost/site1/admin
我在浏览器中遇到错误
“此页面无法正常运行 本地主机将您重定向了太多次。 尝试清除您的cookie。 ERR_TOO_MANY_REDIRECTS“
我猜是因为它卡在某种重定向循环中?
如果我注释掉了构造函数,它将直接进入管理员页面 正在登录,这显然不好。
我还向:handler.php添加了一个函数,如下所示:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Auth;
class AdminLoginController extends Controller
{
protected $guard = 'admin';
use AuthenticatesUsers;
public function __construct()
{
$this->middleware('auth:admin')->except('logout');
}
protected function guard()
{
return Auth::guard('admin');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//return view('auth/admin');
return view('auth/admin');
}
public function showLoginForm()
{
return view('auth.admin-login');
}
public function login( Request $request )
{
// validate form
$this->validate( $request , [
'email' => 'required|email',
'password' => 'required|min:6'
]);
// attempt login
if (Auth::guard('admin')->attempt(['email'=>$request->email,'password'=>$request->password])) {
// if successful goto intended page
return redirect()->intended(route('admin.dashboard'));
}
// unsuccessful - redirect.
return redirect()->back()->withInput( $request->only('email','remember'));
}
}
Handler.php
public function unauthenticated($request, AuthenticationException $exception)
{
if($request->expectsJson()) {
return response()->json(['error'=>'Unauthenticated' , 401 ]);
}
$guard = array_get( $exception->guards(),0);
switch($guard) {
case 'admin':
$login='admin.login'; break;
default:
$login ='login'; break;
}
return redirect()->guest(route( $login ));
}
也不确定是否相关或有用-但如果我注释掉handler.php中的unauthenticated()函数,它将重定向到标准登录名/而不是新的管理员登录名。 并将功能保留在Firefox中会给我“页面无法正确重定向”
答案 0 :(得分:0)
认为我解决了... 在处理程序中,我将重定向更改为:
case 'admin':
if(Auth::guard($guard)->check()) {
return redirect()->route('admin/dashboard');
}
break;
在RedirectIfAuthenticated中:
case 'admin':
if(Auth::guard($guard)->check()) {
return redirect()->route('admin/dashboard');
}
break;
在添加中间件的路由中:
Route::get('/' , 'Auth\AdminLoginController@index')->name('admin.dashboard')->middleware('auth:admin');
在管理控制器中,我注释掉了构造函数:
// public function __construct()
// {
// $this->middleware('auth:admin')->except('logout');
// }
我更改了:
return redirect()->guest(route( $login ));
收件人:
return redirect()->to( $login );
这似乎可行-我不确定这是否是解决问题的“官方”方式!