laravel auth添加管理员

时间:2018-10-04 13:27:21

标签: laravel authentication

嗨,我正在尝试遵循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中会给我“页面无法正确重定向”

1 个答案:

答案 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 );

这似乎可行-我不确定这是否是解决问题的“官方”方式!