Laravel 11 的 url 问题

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

几天来我在访问为我的中间件定义的路由方面遇到了问题。所有这一切的具体问题是,例如,当我想输入除用户之外的实体的 URL 时,它总是让我返回主页,无论登录用户具有什么用户角色。我将代码的重要部分留在这里,以防有人知道原因:

用户模型:

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name',
        'email',
        'password',
        'rol_usuario',
        'fecha_nacimiento',
        'sexo',
        'tarjeta_credito',
    ];

    protected $hidden = [
        'password',
    ];

    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

UsuariosController中的登录功能:

public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (Auth::attempt($credentials)) {
            Log::info('Inicio de sesión exitoso para el email: ' . $request->input('email'));
            return redirect()->route('home');
        }

        return back()->withErrors([
            'email' => 'Las credenciales son incorrectas.',
        ])->onlyInput('email');
    }

管理员中间件:

public function handle($request, Closure $next) : Response
    {
        if (!Auth::check()) {
            return redirect()->route('login.form')->withErrors('Debes iniciar sesión para acceder a esta página.');
        }
    
        if (Auth::user()->rol_usuario !== 'administrador') {
            return redirect()->route('home')->withErrors('No tienes permiso para acceder a esta página.');
        }

        return $next($request);
    }

web.php:

// Rutas de autenticación de usuarios
Route::get('login', [UsuariosController ::class, 'create'])->name('login');
Route::post('login', [UsuariosController::class, 'store']);
Route::post('logout', [UsuariosController::class, 'destroy'])->name('logout');
// Rutas para la gestión de carteras
Route::middleware(['auth', 'administrador'])->group(function () {
    Route::get('carteras', [CarteraController::class, 'index'])->name('carteras.index');
    Route::get('carteras/create', [CarteraController::class, 'create'])->name('carteras.create');
    Route::post('carteras/create', [CarteraController::class, 'store'])->name('carteras.store');
});

我尝试将 user_role 属性引入 $credentials 变量,但它不会以任何方式接受它,对于 Users 实体的 url,我访问它没有问题,但对于 Portfolio 来说,只有在其中创建的方法的索引控制器可访问。

php authentication routes roles laravel-11
1个回答
0
投票

首先,您不能向凭据变量添加任何内容。因为您使用此变量来检查用户是否可以登录您的系统。 我的意思是尝试函数具有特定的输入,因此如果您想向凭据添加其他值,您应该自定义尝试函数并编写自定义算法。 如果您想在应用程序中处理角色权限,您可以使用 laravel spatie 包

否则,如果您不喜欢 spatie 包的复杂性,您可以调试您的应用程序。因此,在中间件中添加

dd(Auth::user()->rol_usuario)
来了解您的用户角色是什么。确保您的用户具有所需的角色。

© www.soinside.com 2019 - 2024. All rights reserved.