首页 > 解决方案 > 使用管理员保护成功登录后没有身份验证值

问题描述

有人可以帮我理解我做错了什么吗?

这是我的config/auth.php文件

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
]

这是我用于管理员登录的 LoginController

    namespace App\Http\Controllers\Admin\Auth;
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use Illuminate\Foundation\Auth\AuthenticatesUsers;
    use Redirect;
    use Illuminate\Contracts\Auth\Guard;
    use Illuminate\Support\Facades\Session;
    use Illuminate\Support\Facades\Auth;

    class LoginController extends Controller
    {
       use AuthenticatesUsers;
    public function __construct()
    {   
        $this->middleware('guest:admin');
    }

    /**
     * Function to show login form
     */
    public function fnToShowAdminLoginForm(){
        return view('Admin.Auth.loginForm');
    }

    /**
     * Function to check login credentials 
     */

     public function fnToSubmitAdminLogin(Request $request){
        $messsages = array(
            'emailOrphone.required'=>'You cant leave Email/Phone field empty',
            'password.required'=>'You cant leave password field empty',                   
        );

        $rules = array(
            'emailOrphone'=>'required',
            'password'=>'required',
        );

        $validator = \Validator::make($request->all(), $rules,$messsages);

        if ($validator->fails()) {
            return back()->withInput()->withErrors($validator->errors());
        }else{

            if(Auth::guard('admin')->attempt(['email' => filter_var($request->emailOrphone, FILTER_VALIDATE_EMAIL ), 'password' => $request->password],true) ){  
                //dd(Auth::guard('admin')->user()->name);////**Here i am getting the auth**                        
                return Redirect::intended('admin/login');
            }else{
                return back()->withInput()->withErrors(['upWorng'=>'Email/Phone Or Password does not match']);
            }
        }

     }


}

这是我的路线 web.php

    Route::prefix('/admin')->name('admin.')->namespace('Admin')->group(function(){
    Route::namespace('Auth')->group(function(){
        Route::get('login','LoginController@fnToShowAdminLoginForm')->name('dologin');
        Route::post('login','LoginController@fnToSubmitAdminLogin');
        Route::get('logout','LogoutController@dologout')->name('dologout');
    });
   Route::group(['middleware' => 'auth:admin'], function () {
        Route::get('colorList/master','ColorController@index')->name('color');
        Route::post('createColorMaster','ColorController@fnToCreateNewColor')->name('createColor');

    });

这是我成功登录 ColorController.php 后点击的控制器

    <?php

       namespace App\Http\Controllers\Admin;

       use App\Http\Controllers\Controller;
       use Illuminate\Http\Request;
       use App\Models\Colors;
       use Validator;
       use Illuminate\Support\Facades\Auth;
       use Session;

     class ColorController extends Controller
    {
    protected $loggedUser;

    public function __construct(){
        $this->middleware('auth:admin');
        dd(\Auth::guard('admin')->user());////I am not getting the auth here
        //$this->loggedUser = Auth::guard('admin')->user()->id;
    }
    public function index(){
        $colors = Colors::orderBy('color','ASC')->get();
        return view('Admin.Master.Color',compact('colors'));
    }   
   }

这是我的 RedirectIfAuthenticated 中间件

namespace App\Http\Middleware;

    use App\Providers\RouteServiceProvider;
    use Closure;
    use Illuminate\Support\Facades\Auth;

    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()) {
            //dd(Auth::guard($guard));
            if ('admin' === $guard) {
                return redirect(route('admin.color'));
            }
            return redirect('/');
        }
        return $next($request);
    }
   }

我可以成功登录,但是当我redirect()->intended() 或 redirect()->to() 时,Auth::guard('admin')不存储任何值。我想不通。我正在使用 laravel 6.9.0 并且不知道为什么这不起作用,我做错了什么。提前谢谢..!

标签: laravel-6auth-guard

解决方案


您的LoginController扩展Controller和使用AuthenticatesUsers. 这意味着您拥有默认的 laravel 身份验证系统。但是后来,你开始发明自己的轮子,为什么?例如,您需要显示您的登录表单而不是默认的。showLoginForm没问题,将方法从特征复制AuthenticatesUsers到您的LoginController并编辑返回视图。

您需要编辑验证,将方法validateLogin从 trait复制AuthenticatesUsers到您的LoginController. 在所有地方继续以相同的方式(注册、验证等)。

不要与框架抗争,让他为你工作。


推荐阅读