用户未在 Spatie 中使用 Multi Auth/Guard 登录

时间:2021-01-19 07:08:27

标签: laravel spatie

我尝试使用 Admin Guard 使用多重身份验证并使用 Spatie 实现,在使用 Admin Guard 登录成功后,然后访问组中间件,但我收到错误 403 用户未登录。

这是我的代码:

管理模式:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;
    
class Administration extends Authenticable 
{
    use HasFactory, Notifiable, HasRoles;

    protected $guard_name = 'admins';


    protected $fillable = [
        'name', 'email', 'username', 'password', 'photo'
    ];

    protected $hidden = ['password'];
}

登录控制器:

public function __construct()
    {
        $this->middleware('guest:admins')->except('logout');
    }

    public function authenticated(Request $request, $user)
    {

        if ($user->hasRole('admin')) {
            return redirect()->route('bank.master-bank.index');
        } else if ($user->hasRole('finance')) {
            return redirect()->route('bank.master-bank.index');
        } else if ($user->hasRole('supervisor')) {
            return redirect()->route('bank.master-bank.index');
        }

        return redirect('login');
    }

    public function login(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required'
        ]);

        if (auth()->guard('admins')->attempt($request->only('email', 'password'))) {
            $request->session()->regenerate();
            $this->clearLoginAttempts($request);
            return redirect()->intended('/bank/master-bank');
        } else {
            $this->incrementLoginAttempts($request);

            return redirect()
                ->back()
                ->withInput()
                ->withErrors(["Incorrect user login details!"]);
        }
}

Auth.php

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

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

        'admins' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],


    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Models\Administration::class,
        ],

    ],

路由 Web.php

Route::group(['middleware' => 'auth:admins'], function () {
    Route::group(['middleware' => ['role:admin']], function () {
            Route::group(['prefix' => 'user', 'as' => 'user.'], function () {
                Route::get('/', [UserAdminController::class, 'user_panel'])->name('user_panel');
                Route::get('/role-user', [UserAdminController::class, 'role_panel'])
                Route::get('/detail_user/{id}', [UserAdminController::class, 'detail_user'])
    
                Route::resource('/verif-user', VerifUserController::class);
            });
        });
});

当访问 Route::group(['middleware' => ['role:admin']], function () { 我得到错误 403 用户未登录。

1 个答案:

答案 0 :(得分:0)

检查您没有定义您的中间件角色并且您在此处使用它。