一起使用auth和角色中间件

问题描述 投票:0回答:1

所以我尝试根据用户的角色将用户重定向到他们的仪表板。但是当我登录时,页面重定向回登录页面,而不是它应该访问的链接。当我删除身份验证中间件时,页面会重定向,但出现 403:用户未登录错误。这是我的代码:

AuthContoller.php:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Models\Login;
use App\Models\Signup;
use App\Models\User;
use App\Http\Controllers\Controller;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');
        $role = $request->input('role');

        $guard = $this->getGuardByRole($role);

        if (!$guard) {
            return redirect()->route('login')->with('error', 'Invalid role');
        }

        Auth::shouldUse($guard);

        if (Auth::guard($guard)->attempt($credentials)) {
            // Authentication successful
            switch ($role) {
                case 'super admin':
                case 'admin':
                case 'additional admin':
                    // $role = auth()->user()->role;
                    return redirect()->route('admin');
                    break;
    
                case 'user':
                    // $role = auth()->user()->role;
                    return redirect()->route('user');
                    break;
            }
        }
// return view($viewName, ['userRole' => $userRole]);
        return redirect()->route('login')->with('error', 'Invalid login credentials');
    }

    protected function getGuardByRole($role)
    {
        switch ($role) {
            case 'user':
                return 'web';
            case 'super admin':
            case 'additional admin':
                return 'sadmin';
            case 'admin':
                return 'admin';
            default:
                // Handle default or unknown role
                return null;
        }
    }
}

web.php:

Route::get('login', function () {
    return view('commons.login');
});

Route::post('/login', [AuthController::class, 'login'])->name('login');

Route::middleware(['auth'])->group(function () {
Route::middleware(['role:super admin|admin|additional admin'])->group(function () {
    Route::get('admin/home', function () {
        return view('admin.home');
    })->name('admin');
   
});
Route::middleware(['role:user'])->group(function () {
    Route::get('user/home', function () {
        return view('user.home');
    })->name('user');
    
});
});

配置/auth.php:

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

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Models\Signup::class,
        ],
        'sadmins' => [
            'driver' => 'eloquent',
            'model' => App\Models\Login::class,
        ],
    ],


    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins', // Use a custom 'admins' provider for the 'admin' guard
        ],
        'sadmin' => [
            'driver' => 'session',
            'provider' => 'sadmins', // Use a custom 'admins' provider for the 'admin' guard
        ],
    ],

内核.php:

    protected $routeMiddleware = [
        'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
        'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
        'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
    ];


 protected $middlewareAliases = [
        'auth' => \App\Http\Middleware\Authenticate::class,

请帮忙

如果页面正确加载,但在登录页面本身上,它不会加载管理/主页或用户/主页,我尝试在 Authcontroller 中使用视图而不是重定向()函数

错误更新:页面 admin/home 或 user/home 已加载到开发人员工具网络选项卡中,但状态为 302,有什么想法吗?

laravel authentication permissions roles
1个回答
0
投票
Route::group(['middleware' => ['auth','role']], function() { *routes here* })
© www.soinside.com 2019 - 2024. All rights reserved.