1

我曾经使用 laravel 5.5 并且早于https://github.com/Hesto/multi-auth

但是这个存储库不会为 laravel 7.0 更新

如何在 Laravel 7.0 中创建多重身份验证?

4

1 回答 1

5

如果你想使用一个包,你可以使用这个包laravel-multiauth

或者

如果您想multi-auth根据用户表中的字段创建自定义 for.eg ,请is_admin按照以下步骤操作:

假设你已经安装了 Laravel 并连接了数据库

Step1:is_admin在用户表和模型中添加新行。然后运行迁移。

 public function up()
        {
            Schema::create('users', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('name');
                $table->string('email');
                $table->timestamp('email_verified_at')->nullable();
                $table->boolean('is_admin')->nullable(); // add this
                $table->string('password');
                $table->rememberToken();
                $table->timestamps();

        });

}

应用程序/用户.php

protected $fillable = [
    'name', 'email', 'password', 'is_admin' //add here
];

然后运行迁移

   php artisan migrate

Step2:Auth使用脚手架 创建

laravel/ui使用以下命令安装包

composer require laravel/ui 

生成授权

php artisan ui bootstrap --auth 

npm install

npm run dev

Step3: 创建IsAdmin中间件将只允许admin访问该路由的用户

php artisan make:middleware IsAdmin

应用程序/Http/中间件/IsAdmin.php

IsAdmin在中间件中添加这个

public function handle($request, Closure $next)
{
    if(auth()->user()->is_admin == 1){
       return $next($request);
    }
    return redirect(‘home’)->with(‘error’,"You don't have admin access.");
}

注册你的IsAdmin中间件app/Http/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,
       'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
       'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
   'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'is_admin' => \App\Http\Middleware\IsAdmin::class, // add this

];

Step4: 为管理员创建路由routes/web.php

Route::get('admin/home', 'HomeController@adminHome')->name('admin.home')->middleware('is_admin');

Step5:在中添加adminHome()管理路由的方法app/Http/Controllers/HomeController.php

public function adminHome()
 {
      return view('adminHome');
 }

Step6:更改LoginController,当用户登录时,我们根据用户访问重定向。如果是普通用户,我们将重定向到主路由,如果是管理员用户,我们将重定向到管理员路由app/Http/Controllers/Auth/LoginController.php

public function login(Request $request)
{   
    $input = $request->all();
    $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if(auth()->attempt(array('email' => $input['email'], 'password' => $input['password'])))
    {
        if (auth()->user()->is_admin == 1) {
            return redirect()->route('admin.home');
        }else{
            return redirect()->route('home');
        }
    }else{
        return redirect()->route('login')
            ->with('error','Email-Address And Password Are Wrong.');
    }

}
于 2020-03-24T02:58:22.823 回答