今天讲登录逻辑之前,我们需要更改以下几个地方,
App\Models\Admin.php
<?php
namespace 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
<?php
namespace App\Http\Controllers\admin;
use App\Http\Controllers\Controller;
use App\Http\ request s\Login Request ;
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,这个里面的get Facade Accessor返回“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!除非你输错了!