我正在将 Spatie 的 Laravel 权限包与 Laravel Breeze 一起使用。我为两种类型的用户创建了两个注册表单:“学生”和“教师”。当我以“学生”的身份创建帐户时,它会显示以下错误消息。
<块引用>没有名为 student
的角色。
注册用户控制器
class RegisteredUserController extends Controller
{
/**
* Display the registration view for student.
*
* @return \Illuminate\View\View
*/
public function createStudent()
{
$role = Role::create(['name' => 'student']);
return view('auth.student.student-space', compact('student'));
}
/**
* Display the registration view for instructor.
*
* @return \Illuminate\View\View
*/
public function createInstructor()
{
$role = Role::create(['name' => 'instructor']);
return view('auth.instructor.instructor-space', compact('role'));
}
/**
* Handle an incoming registration request.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Validation\ValidationException
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|confirmed|min:8',
]);
Auth::login($user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]));
$user->assignRole('student', 'instructor');
$user->save();
// Check if the "Student" has the correct role
if ($user->hasRole('student')) {
return redirect()->intended('/student/dashboard');
}
// Check if the "Instructor" has the correct role
if ($user->hasRole('instructor')) {
return redirect()->intended('/instructor/dashboard');
}
event(new Registered($user));
}
}
AuthenticatedSessionController
public function store(LoginRequest $request)
{
$request->authenticate();
$request->session()->regenerate();
if(auth()->check() && auth()->user()->hasRole('student')) {
return redirect()->intended('/student/dashboard');
}
if(auth()->check() && auth()->user()->hasRole('instructor')) {
return redirect()->intended('/instructor/dashboard');
}
// return redirect(RouteServiceProvider::HOME);
}
routes/auth.php
Route::get('/student-space',
[RegisteredUserController::class, 'createStudent'])
->middleware('guest')->name('student-space');
Route::post('/student-space',
[RegisteredUserController::class, 'store'])
->middleware('guest');
Route::get('/instructor-space',
[RegisteredUserController::class, 'createInstructor'])
->middleware('guest')->name('instructor-space');
Route::post('/instructor-space',
[RegisteredUserController::class, 'store'])
->middleware('guest');