如何在Laravel 7中创建多重身份验证? [英] How to create multi auth in laravel 7?

查看:79
本文介绍了如何在Laravel 7中创建多重身份验证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

但是此存储库不会针对laravel 7.0进行更新

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

解决方案

如果要使用软件包,可以使用此软件包 laravel-multiauth

OR

如果要基于用户表中的字段(例如 is_admin )创建自定义 multi-auth ,请按照以下步骤操作:

假设您已经安装了Laravel并建立了与数据库的连接

第1步:在用户表和模型中添加新行 is_admin .然后运行迁移.

 公共功能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();//添加$ table-> string('password');$ table-> rememberToken();$ table-> timestamps();});} 

app/User.php

 受保护的$ fillable = ['名称','电子邮件','密码','is_admin'//在此处添加]; 

然后运行迁移

  php artisan迁移 

第二步:使用支架创建 Auth

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

  composer require laravel/ui 

生成身份验证

  php artisan ui bootstrap --authnpm安装npm run dev 

第3步::创建 IsAdmin 中间件将仅允许 admin 访问该路由的用户

  php artisan make:middleware IsAdmin 

app/Http/middleware/IsAdmin.php

IsAdmin 中间件

中添加它

 公共函数句柄($ request,闭包$ next){if(auth()-> user()-> is_admin == 1){返回$ next($ request);}return redirect('home')-> with('error',您没有管理员权限.");} 

app/Http/Kernel.php

中注册 IsAdmin 中间件

  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,'可以'=>\ Illuminate \ Auth \ Middleware \ Authorize :: class,'客人'=>\ App \ Http \ Middleware \ RedirectIfAuthenticated :: class,'签名'=>\ Illuminate \ Routing \ Middleware \ ValidateSignature :: class,'throttle'=>\ Illuminate \ Routing \ Middleware \ ThrottleRequests :: class,'verified'=>\ Illuminate \ Auth \ Middleware \ EnsureEmailIsVerified :: class,'is_admin'=>\ App \ Http \ Middleware \ IsAdmin :: class,//添加此]; 

第4步:在 routes/web.php

中为管理员创建路由

  Route :: get('admin/home','HomeController @ adminHome')->名称('admin.home')->中间件('is_admin'); 

第5步: app/Http/Controllers/HomeController.php

中添加用于管理路由的 adminHome()方法

 公共功能adminHome(){返回视图('adminHome');} 

第6步:更改 LoginController ,当用户登录时,我们会根据用户访问权限进行重定向.如果普通用户比我们将重定向到本地路由,而管理员用户比我们将重定向到 app/Http/Controllers/Auth/LoginController.php

中的管理路由

 公共功能登录(请求$ request){$ input = $ request-> all();$ this-> validate($ request,['email'=>必填|电子邮件",'password'=>'必需的',]);if(auth()-> attempt(array('email'=> $ input ['email'],'password'=> $ input ['password'])))){如果(auth()-> user()-> is_admin == 1){返回redirect()-> route('admin.home');}别的{返回redirect()-> route('home');}}别的{返回redirect()-> route('login')-> with('错误','电子邮件地址和密码错误.');}} 

I used to be for laravel 5.5 and earlier than https://github.com/Hesto/multi-auth .

But this repository don't update for laravel 7.0

How to create multi auth in Laravel 7.0 ?

解决方案

If you want to use a package the you can use this package laravel-multiauth

OR

if you want to create custom multi-auth based on a field in your users table for.e.g is_admin then follow the below steps:

Assuming you have installed Laravel and made a connection to database

Step1: Add new row is_admin in users table and model. then run the migration.

 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();

        });

}

app/User.php

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

Then run the migration

   php artisan migrate

Step2: Create Auth using scaffold

Install laravel/ui package using below command

composer require laravel/ui 

Generate auth

php artisan ui bootstrap --auth 

npm install

npm run dev

Step3: Create IsAdmin Middleware will allows only admin access users to that routes

php artisan make:middleware IsAdmin

app/Http/middleware/IsAdmin.php

Add this in IsAdmin middleware

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.");
}

Register your IsAdmin middleware in 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: Create your route for admin in routes/web.php

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

Step5: Add adminHome() method for admin route in app/Http/Controllers/HomeController.php

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

Step6: Change LoginController, when user will login than we redirect according to user access. if normal user than we will redirect to home route and if admin user than we redirect to admin route in 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.');
    }

}

这篇关于如何在Laravel 7中创建多重身份验证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆