认证重定向路由

时间:2019-11-30 12:53:39

标签: laravel laravel-5 laravel-authentication

如果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');
    }

它也不起作用

2 个答案:

答案 0 :(得分:2)

我针对这种情况的方法是使用@sssurii告诉您的中间件

我有一个角色表,其中列出了普通用户和admin用户,此外,我还具有以下中间件:

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);
    }
}

然后在内核类中,我在路由中添加了该中间件

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');
    .....
    }

在这里,您可以过滤对管理路由的请求,并仅允许进入属于组/角色Admin的用户。 之后,如果要在登录时进行自动重定向,则应该在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');
    }

答案 1 :(得分:1)

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

例如,您可以创建一个管理员中间件

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
];