您的位置 首页 php

laravel-cms登录功能(登录逻辑,重要)

今天讲登录逻辑之前,我们需要更改以下几个地方,

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!除非你输错了!

文章来源:智云一二三科技

文章标题:laravel-cms登录功能(登录逻辑,重要)

文章地址:https://www.zhihuclub.com/153450.shtml

关于作者: 智云科技

热门文章

网站地图