-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Description
Description
I've just upgraded my Laravel project to Laravel 11 from Laravel 10. I've flushed caches. I'm getting the error:
There is no role named
super_admin
for guardweb
.
Coming from within the RoleDoesNotExist
class line 11.
My User
model defines HasRoles
, and my default auth gaurd in my config file is api
, not web
. I haven't made any changes to my User
model. Someone suggests this but in my project, I wasn't defining this in Laravel 10. So I think this is a bug.
Steps To Reproduce
Myauth.php
config:
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option defines the default authentication "guard" and password
| reset "broker" for your application. You may change these values
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => env('AUTH_GUARD', 'api'),
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| which utilizes session storage plus the Eloquent user provider.
|
| All authentication guards have a user provider, which defines how the
| users are actually retrieved out of your database or other storage
| system used by the application. Typically, Eloquent is utilized.
|
| Supported: "session"
|
*/
'guards' => [
'api' => [
'driver' => 'session',
'provider' => 'users',
],
'web' => [
'driver' => 'session',
'provider' => 'users',
]
],
Example Application
No response
Version of spatie/laravel-permission package:
6.4.0
Version of laravel/framework package:
11.25
PHP version:
8.3.9
Database engine and version:
MySQL 8
OS: Windows/Mac/Linux version:
Mac
Additional context
My project uses Laravel Sanctum and is an API to a Nuxt front-end. The following in your code:
/**
* Lookup a guard name relevant for the $class model and the current user.
*
* @param string|Model $class model class object or name
* @return string guard name
*/
public static function getDefaultName($class): string
{
$default = config('auth.defaults.guard');
$possible_guards = static::getNames($class);
// return current-detected auth.defaults.guard if it matches one of those that have been checked
if ($possible_guards->contains($default)) {
return $default;
}
return $possible_guards->first() ?: $default;
}
$possible_guards
appears to return ['web', 'api']
in this order. But changing them around in my config doesn't work. They're always in this order. In addition, my default is sanctum
.