App\Models\Admin.php
<?phpnamespace App\Models;use Illuminate\Contracts\Auth\MustVerifyEmail;use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Foundation\Auth\User as Authenticatable;use Illuminate\Notifications\Notifiable;use Laravel\Sanctum\HasApiTokens;class Admin extends Authenticatable{ use HasApiTokens, HasFactory, Notifiable; public $timestamps = false;}
config/auth.php
由于这个文件太大,在这里我只贴一下变动的地方:

'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin'=>[ 'driver' => 'session', 'provider' => 'admins', ] ],
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ] // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ],
App\Https\Controllers\admin\LoginController.php
<?phpnamespace App\Http\Controllers\admin;use App\Http\Controllers\Controller;use App\Http\Requests\LoginRequest;use Illuminate\Support\Facades\Validator;use Illuminate\Http\Request;use Illuminate\Support\Facades\Auth;class LoginController extends Controller{ // public function index() { return view("admin.login"); } public function loginAct(LoginRequest $request){ $info = $request->only(['username','password']); $state = Auth::guard('admin')->attempt($info); dd($state); return view('admin.index'); } public function logout(){ Auth::guard('admin')->logout(); }}
注:我们讲一下登录流程,走到了LoginController.php中的loginAct,Auth::guard这里我们利用了Auth的Facade,这个里面的getFacadeAccessor返回“auth”,我们依据这个auth,在AuthServiceProvider.php中找到AuthManager
$this->app->singleton('auth', function ($app) { return new AuthManager($app); });
这个AuthManager.php中的guard方法,我们这里传入的是‘admin’,这个会找到config\auth.php中的
'admin'=>[ 'driver' => 'session', 'provider' => 'admins', ]
这里通过供应的provider=>'admins'找开了此文件下的配置文件
'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ]
这里我们找到了Admin.php,这个Admin又和我们的数据表admins对应,
我们可以看到通过AuthManager里的guard方法,一步步走下去,走到了createSessionDriver,返回了SessionGuard,这里有attempt方法,SessionGuard里会通报那个admin的数据表干系的model,你可以通过上一行的createUserProvider中找到,这个是在此类 use CreateUserProvider那里找到createUserProvider,里面又调用createEloquentProvider,这里返回了EloquentUseProvider,在这个里面有一个方法 retrieveByCredentials,这里便是查询的数据据,而这个方法就在SessionGuard的attempt的方法里进行调用的!
[奸笑]
好吧,那么运行一下,输入你之前添加的仿照数据账号和密码看下输出!
为true!除非你输错了!