每当用户登录时,我都能成功重定向。我正在使用登录响应方法。但是当我在用户注册时尝试为用户做同样的事情时,它会在浏览器中显示 URL,但我需要刷新才能查看页面以使其加载。这里发生了一些奇怪的事情。
遵循以下方法: https ://talltips.novate.co.uk/laravel/laravel-8-conditional-login-redirects 要了解问题,请查看下面的 gif。登录响应按我预期的方式工作,但注册响应不起作用;它的行为很奇怪。
登录响应
注册响应
登录响应.php
namespace App\Http\Responses;
use Illuminate\Support\Facades\Auth;
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
class LoginResponse implements LoginResponseContract
{
public function toResponse($request)
{
if (Auth::user()->hasAnyRoles(['Administrator', 'Employee'])) {
return redirect()->route('backend.dashboard');
}
return redirect()->route('frontend.dashboard');
}
}
注册响应.php
<?php
namespace App\Http\Responses;
use Illuminate\Support\Facades\Auth;
use Laravel\Fortify\Contracts\RegisterResponse as RegisterResponseContract;
class RegisterResponse implements RegisterResponseContract
{
public function toResponse($request)
{
if(Auth::user()->hasAnyRoles(['Administrator', 'Employee'])) {
return redirect()->route('backend.dashboard');
}
return redirect()->route('frontend.dashboard');
}
}
JetstreamServiceProvider.php
public function boot() {
$this - > configurePermissions();
Jetstream::deleteUsersUsing(DeleteUser::class);
// Register New LoginResponse
$this - > app - > singleton(
\Laravel\ Fortify\ Contracts\ LoginResponse::class,
\App\ Http\ Responses\ LoginResponse::class);
// Register New RegisterResponse
$this - > app - > singleton(
\Laravel\ Fortify\ Contracts\ RegisterResponse::class,
\App\ Http\ Responses\ RegisterResponse::class);
}
AuthServiceProvider.php
public function boot() {
$this - > registerPolicies();
Gate::define('access-backend', function($user) {
return $user - > hasAnyRoles(['Administrator', 'Employee']);
});
Gate::define('access-frontend', function($user) {
return $user - > hasRole('Client');
});
}
网页.php
Route::middleware(['auth:sanctum', 'verified'])->group(function () {
\
Route::prefix('backend')->name('backend.')->middleware(['can:access-backend'])->group(function () {
Route::get('/dashboard', \App\Http\Livewire\Backend\Dashboard::class)->name('dashboard');
});
Route::prefix('frontend')->name('frontend.')->middleware(['can:access-frontend'])->group(function () {
Route::get('/dashboard', \App\Http\Livewire\Frontend\Dashboard::class)->name('dashboard');
});
});