1

每当用户登录时,我都能成功重定向。我正在使用登录响应方法。但是当我在用户注册时尝试为用户做同样的事情时,它会在浏览器中显示 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');
    });
});
4

1 回答 1

0

在我使用的RegisterResponse.php文件中

return $request->wantsJson()
                ? new JsonResponse('', 201)
                : redirect(config('fortify.user'));

并在JetstreamServiceProvider.php

$this->app->singleton(
\Laravel\Fortify\Contracts\RegisterResponse::class,
\App\Http\Responses\RegisterResponse::class

我没有问题。也许解决你的问题。

于 2021-12-22T14:00:06.330 回答