如何在Laravel 5.6中设置多个身份验证

藏色散人
藏色散人 原创
2023-04-04 20:00:02 3011浏览

在本文中,我们将介绍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',
    ];

要为Admin设置迁移表,请转到database / migration / *** _ create_admins_table.php并使用以下代码更新代码:

//
{
    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

要设置控制器,请转到app / Http / Controllers / AdminController.php并使用以下代码更新代码:

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

要设置登录控制器,请转到app / Http / Controllers / Auth / AdminLoginController.php并使用以下代码更新代码:

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中的代码并粘贴到新文件中。

现在使用以下内容更新新文件:

// 
<div class="card-header">{{ __('Admin Login') }}</div>
<div class="card-body">
  <form method="POST" action="{{ route('admin.login.submit') }}">
//

第9步:设置管理员的主视图

要为Admin创建和设置主视图,请转到resources / views /并创建一个新文件admin-home.blade.php。复制resources / views / home.blade.php中的代码并粘贴到新文件中。

现在使用以下内容更新新文件:

// 
<div class="card">
   <div class="card-header">Admin Dashboard</div>
//

第10步:设置Web应用程序路由

要为您的应用程序设置Web路由,请转至routes / web.php并使用以下代码更新代码:

//
Route::get('//m.sbmmt.com/m/', function () {
    return view('layouts.app');
});
Route::prefix('admin')->group(function() {
    Route::get('//m.sbmmt.com/m/login', 'Auth\AdminLoginController@showLoginForm')->name('admin.login');
    Route::post('//m.sbmmt.com/m/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项目中轻松设置多个身份验证。

以上就是如何在Laravel 5.6中设置多个身份验证的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。