身份验证重定向路由
Authentication redirect route
如果 isadmin
是 true
,你能帮我如何创建它将被重定向到管理页面,否则是主页。
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');
}
如果 isadmin
是 true
,你能帮我如何创建它将被重定向到管理页面,否则是主页。
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');
}