【问题标题】:How to redirect Admin to a specific page and users to another - Laravel 8 jetstream如何将管理员重定向到特定页面并将用户重定向到另一个页面 - Laravel 8 jetstream
【发布时间】:2021-01-12 00:31:38
【问题描述】:

我正在尝试将管理员重定向到管理面板页面并将用户重定向到主页

我为用户类型创建了新字段,并在数据库中添加了值“admin”

$table->string('usertype')->nullable();

然后我创建了这个中间件(AdminMiddleware):

<?php

 namespace App\Http\Middleware;

 use Closure;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;

 class AdminMiddleware
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle(Request $request, Closure $next)
{
    if(Auth::user()->usertype == 'admin')
    {
        return $next($request);
    }
    else
    {
        return redirect('/dashboard');
    }
    
   }
  }

然后我将它添加到内核:

        'admin' => \App\Http\Middleware\AdminMiddleware::class,

我将函数添加到 RouteServiceProvider 并导入类:

public const HOME = '/dashboard';
    protected function redirectTo()
    {
        if(Auth::user()->usertype == 'admin')
        {
            return 'panel';
        }
        else
        {
            return 'dashboard';
        }
    }

然后我将路由添加到 web.php:

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

Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
return view('index');
})->name('dashboard');





Route::group(['middleware' => ['auth:sanctum','auth','admin','verified']],function() {
Route::get('/panel', function () {
    return view('admin.dashboard');
});

});

我创建了两个帐户,其中一个是用户类型为“admin”的管理员 但是当我登录时它仍然将我重定向到主页

我在这里做错了什么?

【问题讨论】:

    标签: php laravel admin panel middleware


    【解决方案1】:

    我在我的应用中一直在使用一种简单的方法。

    您不需要为此目的使用中间件。以HomeController 或任何您想要的名称创建一个控制器。 在您 LoginController 中,将属性 redirectTo 更改为简单路线。例如 '/home' 甚至 / 用于超级简单的路线。 现在在routes/web.php 中添加这个指向HomeController 中方法的路由。

    Route::get('/home', 'HomeController@redirectUser');
    

    或者

    Route::get('/', 'HomeController@redirectUser');
    

    另外创建您自己想要重定向到的路线。

    Route::group(['middleware' => ['auth:sanctum', 'verified']], function () {
        Route::get('/panel', function () {
            return view('admin.dashboard');
        });
    });
    

     您还可以为用户数量创建路由。

    现在在您的HomeController 中,在redirectUser() 方法中,添加您的需求。

    if (auth()->user()->usertype == 'admin') {
        return redirect(url('route url'));
    } else {
        return redirect (url('some other url'));
    }
    

    请确保您在路由文件中定义了相同的 URI。

    您也可以在LoginController 中重定向用户。 但它只有在登录后才能工作。当用户点击主页按钮或包含主页网址的徽标时,此方法也会将用户重定向到所需的位置。

    希望这篇文章对你有所帮助。

    谢谢。

    【讨论】:

    • 感谢您的帮助
    • @Sharan 我需要在我的项目中安装身份验证才能执行此操作吗?因为我已经有了jetstream
    【解决方案2】:

    正如Sharan同志所解释的那样,对于那些正在使用jetstream的人来说,它是这样的:

    1- 我们创建控制器: 命名空间 App\Http\Controllers; 使用 Illuminate\Support\Facades\Auth;

    class HomeController extends Controller
    {
        public function redirectUser()
        {
            if (Auth::check()) {
                return view('admin.index');
            } else {
                return view('auth.login');
            }
        }
    
    }
    

    2- 在 web.php 中:

    Route::get('/', 'App\Http\Controllers\\HomeController@redirectUser')->name('homeController');
    Route::group(['middleware' => ['auth:sanctum', 'verified']], function () {
        Route::get('/admin', function () {
            return view('admin.index');
        });
    });
    

    3- 在 RouteServiceProvider.php 中:

    public const HOME = '/admin';
    

    有了这个,我做的是每次有人进入主页面,如果他们没有登录,去登录页面,如果他们已经登录,去/admin页面,但如果在admin上页面我把它重定向到管理员的完整网址。

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2012-04-05
      • 2014-02-22
      • 2023-04-01
      相关资源
      最近更新 更多