Laravel 5.7 + Spatie权限+ JWT身份验证

时间:2018-11-28 14:22:13

标签: php laravel jwt spatie

我正在使用Laravel 5.7设置REST API。为了验证身份,我使用JWT-auth Spatie,对于权限和角色,我使用enter image description here

我的问题:尝试将角色链接到用户时,出现以下错误

Spatie \ Permission \ Exceptions \ RoleDoesNotExist
There is no role named admin.

该角色确实存在于数据库中: {{3}}

这是我尝试为用户分配角色的方式:

$user = User::findOrFail(1);
$user->assignRole('admin');

由于我是Laravel的新手,所以我不确定它是否相关,但是在设置JWT时,我不得不将config/auth.php中的后卫驱动程序更改为jwt

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

我看不到我在做什么错。我添加了角色,然后尝试将角色添加到用户。

4 个答案:

答案 0 :(得分:3)

检查您的应用程序名称空间。如果您是从App更新的,请确保在config/auth.php中进行更新。

另一方面,如果您没有更新App命名空间,请尝试清除缓存并重新设置数据库表的种子。

php artisan config:cache
php artisan cache:clear

检查用户模型,如果您有protected $guard_name = 'api';

希望这会有所帮助。干杯!

答案 1 :(得分:0)

我假设您已将角色手动添加到数据库中。角色被缓存,如果您不使用内置的create方法,则会导致问题。

onload
  

From the GitHub docs

您将需要使用use Spatie\Permission\Models\Role; use Spatie\Permission\Models\Permission; $role = Role::create(['name' => 'writer']); $permission = Permission::create(['name' => 'edit articles']); 手动清除缓存。

执行此操作的更好方法是使用播种器(用于永久角色)或使用Tinker运行代码以创建角色和权限,这将触发清除缓存。

答案 2 :(得分:0)

Guard已从Web更改为api,但仍尝试从数据库中查找Web 分配这样的角色。

use warnings;
use strict;
use feature 'say';
use autodie qw(open);

my $file = shift // die "Usage: $0 filename\n";  #/

# Patterns that determine what file to write to    
my ($p1, $p2) = qw(cat dog);

# Open output files, one for each pattern
my %fh_out = map { open my $fh, '>', "$_.txt"; $_ => $fh } ($p1, $p2); 

open my $fh, '<', $file;

while (<$fh>) {
    if ( my ($week, $type) = /79(week\d+[a-z]).*?($p1|$p2)/i ) {
        say {$fh{$type}} $week;
    }
}

#Link

答案 3 :(得分:0)

如果没有其他答案可以解决您的问题

检查您是否正在使用队列 如果是这样的话 重新启动队列