在Laravel 9中使用jetstream认证?
composer require laravel/jetstream
php artisan jetstream:install livewire
npm install && npm run dev
编写迁移文件
在 Database下Migrations的2014_10_12_000000_create_users_table.php 中增加一个字段“$table->string('utype')->default('CST');”
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->foreignId('current_team_id')->nullable();
$table->string('profile_photo_path', 2048)->nullable();
$table->string('utype')->default('CST');
$table->timestamps();
});
}
数据库迁移:
php artisan migrate
resources/views/layouts/base.blade.php模版添加以下:
@if(Route::has('login'))
@auth
@if(Auth::user()->utype=== 'ADM')
<!--管理员链接-->
<li class="login-form"><a href="#" title="Register">本人账户 (Admin)</a>
<ul class="drop-down one-column hover-fade">
<li><a href="{{ route('admin.dashboard') }}">DASBOARD</a></li>
<li><a href="{{route('logout')}}"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">退出</a>
</li>
</ul>
</li>
@elseif(Auth::user()->utype=== 'SVP')
<!--服务提供商链接-->
<li class="login-form"><a href="#" title="Register">本人账户 (S provider)</a>
<ul class="drop-down one-column hover-fade">
<li><a href="{{ route('sprovider.dashboard') }}">DASBOARD</a></li>
<li><a href="{{route('logout')}}"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">退出</a>
</li>
</ul>
</li>
@else
<!--客户链接-->
<li class="login-form"><a href="#" title="Register">本人账户 (Customer)</a>
<ul class="drop-down one-column hover-fade">
<li><a href="{{ route('customer.dashboard') }}">DASBOARD</a></li>
<li><a href="{{route('logout')}}"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">退出</a>
</li>
</ul>
</li>
@endif
<form id="logout-form" method="Post" action="{{route('logout')}}" style="display: none">
@csrf
</form>
@else
<li class="login-form"><a href="{{ route('register') }}" title="Register">注册</a></li>
<li class="login-form"><a href="{{ route('login') }}" title="Login">登录</a></li>
@endif
<li class="search-bar">
</li>
@endif
注册管理员、服务提供商和客户账号
数据库依次修改一下字段 utype 中的,管理员为ADM,服务提供商为SVP,客户为CST
3.在Laravel 8中创建中间件?
php artisan make:middleware AuthAdmin
打开App\Http\Middleware下的AuthAdmin 确定当前用户是否已通过身份验证
use Illuminate\Support\Facades\Auth;
public function handle(Request $request, Closure $next): Response
{
if (Auth::user()->utype === 'ADM') { // 如果该账号是管理员就进入
return $next($request);
} else {
session()->flush();
return redirect()->route('login'); // 否则重定向登录页面
}
}
php artisan make:middleware AuthSprovider
打开App\Http\Middleware下的AuthSprovider 确定当前用户是否已通过身份验证
use Illuminate\Support\Facades\Auth;
public function handle(Request $request, Closure $next)
{
if (Auth::user()->utype === 'SVP') { // 如果该账号是服务提供商就进入
return $next($request);
} else {
session()->flush();
return redirect()->route('login'); // 否则重定向登录页面
}
}
注册中间件,在App\Http\Kernel类中
protected $routeMiddleware = [
'authadmin'=> \App\Http\Middleware\AuthAdmin::class,
'authsprovider'=> \App\Http\Middleware\AuthSprovider::class,
...
...
...
...
];
在 Providers\RouteServiceProvider,修改一下跳转首页
public const HOME = '/';
创建管理员和服务提供商以及客户的前端模版文件
php artisan make:livewire Admin/AdminDashboardComponent
php artisan make:livewire Sprovider/SproviderDashboardComponent
php artisan make:livewire Customer/CustomerDashboardComponent
控制器加载模版
管理员控制器,App\Http\Livewire\Admin\AdminDashboardComponent
public function render()
{
return view('livewire.admin.admin-dashboard-component')->layout('layouts.base');
}
客户控制器 App\Http\Livewire\Admin\CustomerDashboardComponent
public function render()
{
return view('livewire.customer.customer-dashboard-component')->layout('layouts.base');
}
客服提供商控制器 App\Http\Livewire\Admin\SproviderDashboardComponent
public function render()
{
return view('livewire.sprovider.sprovider-dashboard-component')->layout('layouts.base');
}
在Laravel 8中创建路由组?
// 首页
Route::get('/', \App\Http\Livewire\HomeComponent::class)->name('home');
// 客户
Route::middleware([
'auth:sanctum',
config('jetstream.auth_session'),
'verified'
])->group(function () {
Route::get('/customer/dashboard', \App\Http\Livewire\Customer\CustomerDashboardComponent::class)
->name('customer.dashboard');
});
// 服务提供商
Route::middleware([
'auth:sanctum',
config('jetstream.auth_session'),
'verified',
'authsprovider'
])->group(function () {
Route::get('/sprovider/dashboard', \App\Http\Livewire\Sprovider\SproviderDashboardComponent::class)
->name('sprovider.dashboard');
});
// 管理员
Route::middleware([
'auth:sanctum',
config('jetstream.auth_session'),
'verified',
'authadmin'
])->group(function () {
Route::get('/admin/dashboard', \App\Http\Livewire\Admin\AdminDashboardComponent::class)
->name('admin.dashboard');
});
前端模版加载路由跳转
@if(Route::has('login'))
@auth
@if(Auth::user()->utype=== 'ADM')
<!--管理员链接-->
<li class="login-form"><a href="#" title="Register">本人账户 (Admin)</a>
<ul class="drop-down one-column hover-fade">
<li><a href="{{ route('admin.dashboard') }}">DASBOARD</a></li>
<li><a href="{{route('logout')}}"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">退出</a>
</li>
</ul>
</li>
@elseif(Auth::user()->utype=== 'SVP')
<!--服务提供商链接-->
<li class="login-form"><a href="#" title="Register">本人账户 (S provider)</a>
<ul class="drop-down one-column hover-fade">
<li><a href="{{ route('sprovider.dashboard') }}">DASBOARD</a></li>
<li><a href="{{route('logout')}}"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">退出</a>
</li>
</ul>
</li>
@else
<!--客户链接-->
<li class="login-form"><a href="#" title="Register">本人账户 (Customer)</a>
<ul class="drop-down one-column hover-fade">
<li><a href="{{ route('customer.dashboard') }}">DASBOARD</a></li>
<li><a href="{{route('logout')}}"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">退出</a>
</li>
</ul>
</li>
@endif
<form id="logout-form" method="Post" action="{{route('logout')}}"style="display: none">
@csrf
</form>
@else
<li class="login-form"><a href="{{ route('register') }}" title="Register">注册</a></li>
<li class="login-form"><a href="{{ route('login') }}" title="Login">登录</a></li>
@endif
<li class="search-bar">
</li>
@endif