laravel 中间件在路由仪表板上没有重定向

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

我正在尝试使用中间件对 laravel 进行身份验证,但我的中间件无法重定向到管理/仪表板页面 我的代码如下 数据库中有 roll_as 为 1 的数据,我尝试以管理员身份登录,但是当我输入登录凭据时,中间件将我重定向到 /home 页面 帮我 我的所有代码都在下面
// 这是 adminMiddleware

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Auth;




class AdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        
        if(!Auth::user()->roll_as =='1'){
            return redirect('/home')->with('status','Access Denied Becouse  You Are Not Admin This Acces Only  For Admin');
        }
        return $next($request);
    }
}


/// LoginController
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\App\Http\Middleware\Authenticate;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    // protected $redirectTo = RouteServiceProvider::HOME;
    protected function authenticated()
    {
        if(Auth::user()->roll_as=='1'){
            return redirect('admin/dashboard')->with('status','Welcome Admin');
        }
         else{
             return redirect('/home')->with('status','Welocome You are logged In Succesfully');
         }
    }

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

//web.php
<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::group(['prefix' => 'admin','middleware'=>(['auth','asAdmin'])], function () {
    Route::get('dashboard', [App\Http\Controllers\Admin\DashboardController::class,'index']);
});
//kernal.php

  */
    protected $middlewareAliases = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \App\Http\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'asAdmin' => \App\Http\Middleware\AdminMiddleware::class,

    ];

我正在尝试制作中间件,但这个中间件不起作用

请帮助我

laravel middleware laravel-livewire laravel-middleware laravel-authentication
2个回答
0
投票

我认为你的中间件上的条件是错误的。

!Auth::user()->roll_as
我认为它是
false
所以你在中间件中的条件是
if (false == '1')
所以它总是不符合条件。您应该尝试删除条件开始时的
!
并将其更改为
Auth::user()->roll_as !== '1'


0
投票

因为!运算符的优先级高于 == 运算符,!运营商将首先发生。参考更多https://www.php.net/manual/en/language.operators.precedence.php

你可以这样做:

// 你可以用 1 代替 '1'

if(Auth::user()->roll_as != '1'){
    return redirect('/home')->with('status','Access Denied Becouse  You Are Not Admin This Acces Only  For Admin');
}

或:

// 你可以用 1 代替 '1'

if(!(Auth::user()->roll_as == '1')){
    return redirect('/home')->with('status','Access Denied Because  You Are Not Admin This Acces Only  For Admin');
}

或者如果Auth::user()->roll_as是整数类型,可以使用:

Auth::user()->roll_as !== 1

如果Auth::user()->roll_as是字符串类型,应该是:

Auth::user()->roll_as !== '1'

参考https://www.php.net/manual/en/language.operators.comparison.php

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