如何在Laravel 7中创建多重身份验证? [英] How to create multi auth in 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屋!