身份验证重定向路由

Authentication redirect route

如果 isadmintrue,你能帮我如何创建它将被重定向到管理页面,否则是主页。

AuthController

public function postLogin(Request $request){
       if(!auth()->attempt(['email' => $request->email, 'password' => $request->password])){
        return redirect()->back();
       }
       return redirect()->route('home');
    }

主要原因可能是因为这个

return redirect()->route('home');

当尝试更改为 ('admin') 时,它成功重定向。

当我尝试添加时

protected function authenticated(\Illuminate\Http\Request $request, $user)
    {
        if( $user->isadmin){
           return redirect('admin');
        }
        return redirect('home');
    }

也没用

我建议创建一个中间件并使用它来保护路由

例如,您可以创建一个 Admin 中间件

php artisan make:middleware Admin

在App\Http\Middleware\Admin.php

use Auth;
use Session;
use Closure;

public function handle($request, Closure $next)
    {
        // Check if user has permission to access route
        if(!Auth::user()->admin) {
            Session::flash('info', 'You do not have permission to perform this operation!');

            return redirect()->back();
        }

        return $next($request);
    }

然后在受保护的路由中(假设只有您的管理员可以查看此路由中的所有帖子),

Route::post('admin/post/index', 'PostController@index')->middleware('auth');

或者在控制器中

public function __construct()
{
     $this->middleware('auth');
 }

使用 except 排除路由或使用 only 包含方法。

在kernel.php

protected $routeMiddleware = [
     ...
     'admin' => \App\Http\Middleware\Admin::class
];

我对这种情况的处理方法是使用@sssurii 告诉你的中间件

我有一个角色 table,其中规定了普通用户和管理员用户,此外我还有一个如下所示的中间件:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Response;

class AdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $user = Auth::user();
        if(!$user->role->title==='Admin'){
            return route('user');
        }

        return $next($request);
    }
}

然后在内核 class 中,我在路由

中添加了那个中间件
protected $routeMiddleware = [
        ....
        'isAdmin' => \App\Http\Middleware\AdminMiddleware::class
    ];

现在您需要保护您的管理路由,由

解决
    Route::group(['middleware' => ['auth', 'isAdmin'], 
'prefix' => 'admin', 'as' => 'admin.'], function () {
            Route::get('/home', 'Admin\HomeController@index')->name('dashboard');
    .....
    }

这里有一种方法可以过滤对管理员路由的请求,并只让属于 group/role 管理员的用户进入。 之后如果你想在登录时自动重定向,你应该修改 Auth 控制器中的 redirectPath 函数(通常在 app/http/controllers/auth/AuthController.php

public function redirectPath()
    {
        if (\Auth::user()->role->title === 'Admin') {
            return redirect()->route('admin.dashboard');
        }
        return redirect()->route('user.dashboard');
    }