如何在 Laravel 的不同仪表盘 url 上设置用户和管理员

问题描述

我正在开发一个项目,其中用户和管理员是两个不同的登录名。我想将用户和管理员重定向到他们各自的仪表板页面。 我不明白如何做到这一点。在数据库中,我创建了角色列(管理员为 1,用户为 2)。

我不知道如何设置发送到不同的仪表板。

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
use Validator,Redirect,Response;
Use App\User;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Session;
use Socialite;
 
class AuthController extends Controller
{
 
    public function index()
    {
        return view('login');
    }  
 
    public function registration()
    {
        return view('registration');
    }
     
    public function postLogin(Request $request)
    {
        request()->validate([
            'email' => 'required','password' => 'required',]);
 
        $credentials = $request->only('email','password');
        if (Auth::attempt($credentials)) {
           
            // Authentication passed...
             return redirect()->intended('dashboard');
            // return redirect($this->redirectPath());
        }
        return Redirect::to("login")->withSuccess('Oppes! You have entered invalid credentials');
    }
}

目前成功登录只进入相同的仪表板。我想改变它并根据角色发送重定向。

我也创建了中间件,但没有得到确切需要做什么。

<?php

namespace App\Http\Middleware;

use Closure;
Use App\User;

class RoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request,Closure $next)
    {
        if ($this->auth->check()) {

            $auth = Auth::user()->roles()->first();

            switch ($auth->role) {
                case 'admin':
                        return  redirect()->route('admin');    
                    break;
                case 'user':
                        return  redirect()->route('user');  
                    break;

                default:
                    return  redirect()->route('login');  
                    break;
            }   

         }

        return $next($request);
    }
}

并且路由将跟随

Route::get('login','AuthController@index');
Route::post('post-login','AuthController@postLogin');

解决方法

首先,您不需要创建用于根据用户角色重定向用户的中间件。

只需在成功登录尝试后检查用户的角色并进行重定向即可。

public function postLogin(Request $request)
{
    $request->validate([
        'email' => 'required','password' => 'required',]);
 
    $credentials = $request->only('email','password');

    if (Auth::attempt($credentials)) {
        // Authentication passed...

        // Set redirect route/path based on user role.
        $to = $request->user()->role->name === 'admin' ? 'admin' : 'user';
             
        // Redirect user to a named route.
        return redirect()->route($to); // or return redirect($to);
    }

    return Redirect::to('login')->withSuccess('Oops! You have entered invalid credentials.');
}
,

您可以在 Laravel 中使用 Gates 方法轻松管理用户和管理员 URL 的不同仪表板

refer and Try to understand this Example,

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...