日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

laravel6.2多用戶認證分不同用戶表進行驗證登錄認證

作者:渡目成書 更新時間: 2022-01-27 編程語言
  • 網站一般分為后臺和用戶端,如果將用戶數據與管理員數據放在同一張的表會出現不好管理和不必要的風險。
  • 這就需要將用戶表和管理員表進行分開處理,這里就使用laravel的多用戶認證來實現

在laravel6版本以下可以使用php artisan make:auth命令快速生成登錄模板,但在laravel以上登錄模塊進行分離,需要引入拓展包才能夠去處理,這里使用的是laravel6.2版本。

composer require laravel/ui 1.2
php artisan ui bootstrap --auth
php artisan migrate

連接數據庫跑以上的命令,我們即可獲取到默認的登錄模塊,并生成了路由

在這里插入圖片描述
在這里插入圖片描述

  • 并且頁面已經生成完整的登錄模塊,這樣我們一個登錄模塊已經完成,我們根據默認的登錄模塊來完成多用戶認證
    在這里插入圖片描述
    在這里插入圖片描述

多用戶認證

  • 在config/auth.php配置文件進行守衛配置,配置一個自定義的用戶驅動表admin
 'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
        'admin'=>[//新增admin守衛
            'driver'=>'session',
            'provider'=>'admins'
        ],
    ],
'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'admins'=>[//數據模型
            'driver'=>'eloquent',
            'model'=>App\Admin::class
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

根據默認的User模型創建一個類型的Admin模型和admins數據表

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable
{
    protected $table = 'admins';

    protected $fillable = ['name', 'account_number', 'password'];

    public $timestamps = false;

    protected $hidden = ['password', 'remember_token'];
}
  • 新建登錄相關路由
Route::prefix('admin')->namespace('Dauth')->group(function (){
    Route::get('login','AuthController@showLoginForm');
    Route::post('login','AuthController@login');
//    Route::get('logout','AuthController@logout');
});
Route::get('/admin','AdminController@index');

新建中間件AuthAdmin并使用

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class AuthAdmin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if(Auth::guard('admin')->guest()){
            if ($request->ajax() || $request->wantsJson()){
                return response('Unauthorized.', 401);
            }else{
                return redirect()->guest('admin/login');
            }
        }
        return $next($request);
    }
}

在 Kernel.php中注冊中間件

  protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin' => \App\Http\Middleware\AuthAdmin::class
    ];

改寫登錄模塊

<?php

namespace App\Http\Controllers\Dauth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{
    use AuthenticatesUsers;

    protected $redirectTo = '/admin';

    public function __construct()
    {
        $this->middleware('guest:admin')->except('logout');
    }

    /**
     * 登錄頁面
     */

    public function showLoginForm()
    {
        return view('admin.login');
    }

    public function username()
    {
        return 'name';
    }

    protected function guard()
    {
        return Auth::guard('admin');//守衛使用我們定義的數據庫驅動admin
    }
}
  • AdminController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AdminController extends Controller
{
    public function __construct()
    {
        $this->middleware('admin');
    }

    public function index()
    {
        return 12345;
    }
}

我們自定義已經大功告成,我嘗試把我們user表的數據拷貝一份放到admins中進行登錄嘗試是否兩個登錄互不影響

在這里插入圖片描述
在我們自定義模塊是登錄成功的情況下,我們查看默認的user模塊是未登錄狀態
在這里插入圖片描述
并且默認user登錄也能成功登錄

在這里插入圖片描述

原文鏈接:https://blog.csdn.net/weixin_43674113/article/details/114540620

欄目分類
最近更新