·点击蓝字关注我们!每天获取最新的编程小知识!
源 / php中文网 源 / www.php.cn
在本文中,我们将介绍Laravel 5.6中的多个身份验证。这里的多个身份验证只是针对多个用户模型进行身份验证的过程。
(查看原文请点击本文末尾左下角:
在以下部分中,我们将演示Laravel的内置身份验证功能。更具体地说,我将向您展示如何验证管理员用户和普通用户。
第1步:Laravel设置
使用composer设置Laravel项目。
composer create-project --prefer-dist laravel/laravel project-name
第2步:数据库配置
打开.env文件并在文件中设置数据库凭据。
DB_DATABASE= database-name
DB_USERNAME= root
DB_PASSWORD= database-password
第3步:身份验证
要使用Laravel的内置身份验证系统进行注册和登录,只需运行以下命令:
php artisan make:auth
第4步:设置模型和迁移
为管理员Admin创建和设置模型和迁移:
php artisan make:model Admin -m
要为Admin设置模型,请转到app / Admin.php并使用以下代码更新代码:
/**
* Remove 'use Illuminate\Database\Eloquent\Model;'
*/
use
Illuminate\Notifications\Notifiable;
use
Illuminate\Foundation\Auth\User
as
Authenticatable;
class
Admin
extends
Authenticatable
{
use
Notifiable;
// The authentication guard for admin
protected
$guard
=
'admin'
;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected
$fillable
= [
'email'
,
'password'
,
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected
$hidden
= [
'password'
,
'remember_token'
,
];
//
{
Schema::create(
'admins'
,
function
(Blueprint
$table
) {
$table
->increments(
'id'
);
$table
->string(
'email'
)->unique();
$table
->string(
'password'
);
$table
->rememberToken();
$table
->timestamps();
});
}
//
第5步:设置管理员控制器
要为Admin创建控制器,请运行以下命令:
php artisan make:controller AdminController
class
AdminController
extends
Controller{
/**
* Create a new controller instance.
*
* @return void
*/
public
function
__construct()
{
$this
->middleware(
'auth:admin'
);
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public
function
index()
{
return
view(
'admin'
);
}}
第6步:为管理员用户设置登录控制器
要创建Login控制器,请运行以下命令:
php artisan make:controller Auth/AdminLoginController
use
Illuminate\Http\Request;
use
App\Http\Controllers\Controller;
use
Illuminate\Foundation\Auth\AuthenticatesUsers;
use
Illuminate\Support\Facades\Auth;
class
AdminLoginController
extends
Controller{
/**
* Show the application’s login form.
*
* @return \Illuminate\Http\Response
*/
public
function
showLoginForm()
{
return
view(’auth.admin-login’);
}
protected
function
guard(){
return
Auth::guard(
'admin'
);
}
use
AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected
$redirectTo
=
'/admin/dashboard'
;
/**
* Create a new controller instance.
*
* @return void
*/
public
function
__construct()
{
$this
->middleware(
'guest:admin'
)->except(
'logout'
);
}}
第7步:为普通用户设置登录控制器
要为普通用户设置登录控制器,请转到app / Http / Controllers / Auth / LoginController.php并使用以下代码更新代码:
///**
* Show the application's login form.
*
* @
return
\Illuminate\Http\Response
*/
public
function
showLoginForm(){
return
view(
'auth.login'
);}
//
第8步:为管理员设置登录视图
要为Admin创建和设置登录视图,请转到resources / views / auth /并创建一个新文件admin-login.blade.php。复制resources / views / auth / login.blade.php中的代码并粘贴到新文件中。
现在使用以下内容更新新文件:
//
class
=
"card-header"
>{{ __(
'Admin Login'
) }}
class
=
"card-body"
>
"POST"
action=
"{{ route('admin.login.submit') }}"
>
//
第9步:设置管理员的主视图
要为Admin创建和设置主视图,请转到resources / views /并创建一个新文件admin-home.blade.php。复制resources / views / home.blade.php中的代码并粘贴到新文件中。
现在使用以下内容更新新文件:
//
class
=
"card"
>
class
=
"card-header"
>Admin Dashboard
//
第10步:设置Web应用程序路由
要为您的应用程序设置Web路由,请转至routes / web.php并使用以下代码更新代码:
//
Route::get(
'/'
,
function
() {
return
view(
'layouts.app'
);
});
Route::prefix(
'admin'
)->group(
function
() {
Route::get(
'/login'
,
'Auth\AdminLoginController@showLoginForm'
)->name(
'admin.login'
);
Route::post(
'/login'
,
'Auth\AdminLoginController@login'
)->name(
'admin.login.submit'
);
Route::get(
'/home'
,
'AdminController@index'
)->name(
'admin.home'
);
});
//
第11步:设置异常处理程序
要设置异常处理程序,请转到app / Exceptions / Handler.php并使用以下代码更新代码:
//
use
Illuminate\Auth\AuthenticationException;
//
//
protected
$dontReport
= [
\Illuminate\Auth\AuthenticationException::
class
,
\Illuminate\Auth\Access\AuthorizationException::
class
,
\Symfony\Component\HttpKernel\Exception\HttpException::
class
,
\Illuminate\Database\Eloquent\ModelNotFoundException::
class
,
\Illuminate\Session\TokenMismatchException::
class
,
\Illuminate\Validation\ValidationException::
class
,
];
//
//
public
function
render(
$request
, Exception
$exception
)
{
return
parent::render(
$request
,
$exception
);
}
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected
function
unauthenticated(
$request
, AuthenticationException
$exception
)
{
if
(
$request
->expectsJson()) {
return
response()->json([
'error'
=>
'Unauthenticated.'
],401);
}
$guard
= array_get(
$exception
->guards(), 0);
switch
(
$guard
) {
case
'admin'
:
$login
=
'admin.login'
;
break
;
default
:
$login
=
'login'
;
break
;
}
return
redirect()->guest(route(
$login
));
}
第12步:设置重定向中间件
要在身份验证后设置重定向中间件,请转到app / Http / Middleware / RedirectIfAuthenticated.php并使用以下代码更新代码:
//
public
function
handle(
$request
, Closure
$next
,
$guard
= null)
{
switch
(
$guard
) {
case
'admin'
:
if
(Auth::guard(
$guard
)->check()) {
return
redirect()->route(
'admin.home'
);
}
break
;
default
:
if
(Auth::guard(
$guard
)->check()) {
return
redirect()->route(
'home'
);
}
break
;
}
return
$next
(
$request
);
}
//
第13步:设置身份验证配置
要设置身份验证配置,请转至config / auth.php并使用以下代码更新代码:
//
'defaults'
=> [
'guard'
=>
'web'
,
'passwords'
=>
'users'
,
],
'admins'
=> [
'driver'
=>
'eloquent'
,
'model'
=> App\Admin::
class
,
],
//
//
'guards'
=> [
'web'
=> [
'driver'
=>
'session'
,
'provider'
=>
'users'
,
],
'api'
=> [
'driver'
=>
'token'
,
'provider'
=>
'users'
,
],
'admin'
=> [
'driver'
=>
'session'
,
'provider'
=>
'admins'
,
],
'admin-api'
=> [
'driver'
=>
'token'
,
'provider'
=>
'admins'
,
],
],
//
//
'providers'
=> [
'users'
=> [
'driver'
=>
'eloquent'
,
'model'
=> App\User::
class
,
],
'admins'
=> [
'driver'
=>
'eloquent'
,
'model'
=> App\Admin::
class
,
],
],
//
//
'passwords'
=> [
'users'
=> [
'provider'
=>
'users'
,
'table'
=>
'password_resets'
,
'expire'
=> 60,
],
'admins'
=> [
'provider'
=>
'admins'
,
'table'
=>
'password_resets'
,
'expire'
=> 15,
],
],
第14步:设置数据库迁移默认字符串Lenth
要设置数据库迁移的默认字符串长度,请转到app / Providers / AppServiceProvider.php并使用以下代码更新代码:
use
Illuminate\Support\ServiceProvider;
use
Illuminate\Support\Facades\Schema;
//
public
function
boot(){
Schema::defaultStringLength(191);
}
第15步:运行迁移
要运行迁移,请输入以下命令:
php artisan migrate
使用修补程序输入管理员登录凭据:
php artisan tinker
$admin
=
new
App\Admin
$admin
->email =
'admin@app.com'
$admin
->password = Hash::make(’admin-password’)
$admin
->save()
希望您现在可以在Laravel项目中轻松设置多个身份验证。
-END-
声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!