Why laravel 6 auth returns false after redirecting by using custom guard?

前端 未结 4 978
醉梦人生
醉梦人生 2021-01-18 23:31

I am trying to make auth through laravel package using admins table. In the project directory I added admin guard into config/auth.php

\'providers\' => [
         


        
相关标签:
4条回答
  • 2021-01-18 23:50

    Auth::guard('admin')->attempt($request->only('email','password') its returning true or false? If returning false then maybe toy didnt hashed your password Try add this in your Model

     public function setPasswordAttribute($password)
        {
            $this->attributes['password'] = Hash::make($password);
        }
    
    0 讨论(0)
  • 2021-01-18 23:56

    The problem is in your routes file:

    Route::group(['namespace' => $namespace,'prefix' => 'admin',  'middleware' => ['auth']  ], function () {
        Route::get('dashboard', 'DashboardController@index')->name('dashboard');
    });
    

    You are using the default guard with auth middleware. After you are logged in with admin guard you may not be logged in by your default web guard. That is why it fails and tries to redirect you to login page:

    When I try to login, after submitting valid details it does not redirecting me to dashboard, nothing happening. Also when I try for open forcefully /dashboard it take me to login page.

    Instead, you should specify in your group that you are using the admin guard:

    Route::group(['namespace' => $namespace,'prefix' => 'admin',  'middleware' => ['auth:admin']], function () {
        Route::get('dashboard', 'DashboardController@index')->name('dashboard');
    });
    

    However, you already specified in your DashboardController to use $this->middleware('auth:admin');, so there is no need to specifiy it in the route group again. The following is enough and reduces the likelihood to create an error:

    Route::group(['namespace' => $namespace,'prefix' => 'admin'], function () {
        Route::get('dashboard', 'DashboardController@index')->name('dashboard');
    });
    
    0 讨论(0)
  • 2021-01-19 00:04

    An extraction sample of the how you should define your admin model:

     // app/Admin.php
    <?php
    
    namespace App;
    
    use Illuminate\Notifications\Notifiable;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    
    class Admin extends Authenticatable
    {
        use Notifiable;
    
        protected $guard = 'admin';
    
        protected $fillable = [
            'name', 'email', 'password',
        ];
    
        protected $hidden = [
            'password', 'remember_token',
        ];
    }
    

    For more on multiple authentications guards see: How to use multiple authentication guards

    0 讨论(0)
  • 2021-01-19 00:16

    Please note that the Auth::check doesn't work on construct. this is because the middleware hasn't run yet, so Auth::check() should return false or null when you try to check in construct.

    In your login controller, why are you using two redirectto?

       protected $redirectTo = '/admin/dashboard';
       protected function redirectTo()
       {
         return '/admin/dashboard';
       }
    

    it is better to stick with one :-)

    inside your Admin.php , add this:

    protected $guard = 'admin';
    

    for your web.php routes, replace

    Route::group(['namespace' => $namespace,'prefix' => 'admin',  'middleware' => ['auth']  ], function () {
    Route::get('dashboard', 'DashboardController@index')->name('dashboard');
    });
    

    with

    Route::group(['namespace' => $namespace,'prefix' => 'admin',  'middleware' => ['auth:admin']  ], function () {
    Route::get('dashboard', 'DashboardController@index')->name('dashboard');
    });
    

    finally, in DashboardController.php

    replace the

            /* dd(Auth::check()); */ //return false : just want to show you
    

    With:

        $this->middleware(function ($request, $next) {
            dd(Auth::check());  //return false : just want to show you
            die;    
        });
    

    Auth::check() should return true!

    0 讨论(0)
提交回复
热议问题