Php 当用户未登录时,Laravel重定向到特定路由
如果我去,我会看到我的登录页面 如果我去我有重定向到没有管理员 我的网站路线:Php 当用户未登录时,Laravel重定向到特定路由,php,laravel,Php,Laravel,如果我去,我会看到我的登录页面 如果我去我有重定向到没有管理员 我的网站路线: Auth::routes(); Route::prefix('admin')->group(function() { Route::get('/login','Auth\AdminLoginController@showLoginForm')->name('admin.login'); Route::post('/login','Auth\AdminLoginController@log
Auth::routes();
Route::prefix('admin')->group(function() {
Route::get('/login','Auth\AdminLoginController@showLoginForm')->name('admin.login');
Route::post('/login','Auth\AdminLoginController@login')->name('admin.login.submit');
Route::get('/manifiesto','AdminController@getIndex')->name('admin.dashboard');
Route::get('/logout','Auth\AdminLoginController@logout')->name('admin.logout');
Route::get('/trabajadores','AdminController@showTrabajadores')->name('admin.trabajadores');
Route::get('/clientes','AdminController@showClientes')->name('admin.clientes');
Route::get('/proyectos','AdminController@showProyectos')->name('admin.proyectos');
Route::get('/administradores','AdminController@showAdmins')->name('admin.administradores');
});
当我把一些url和/admin放在一起,但用户并没有登录时,我想重定向到/admin/login
谢谢
更多信息:
App/http/Controllers/Auth/AdminLoginController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Auth;
class AdminLoginController extends Controller
{
protected $loginPath = 'admin/login';
public function __construct()
{
$this->middleware('guest:admin', ['except' => ['logout']]);
}
public function showLoginForm()
{
return view('backend.public.pages.login');
}
public function login(Request $request)
{
//validate the form data
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:6'
]);
//attempt to log the user in
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)){
//if successful, then redirect to their intended location
return redirect()->intended(route('admin.dashboard'));
}
return redirect()->back()->withInput($request->only('email','remember'));
}
public function logout()
{
Auth::guard('admin')->logout();
return redirect('/');
}
}
创建一个中间件
在$routeMiddleware
数组中的app/Http/Kernel.php
中向中间件添加密钥
在route.php文件中编写以下代码
Route::group(array('prefix' => 'admin'), function() {
Route::controller('login', 'AdminloginController');
});
Route::group(array('before' => 'admin_ajax', 'prefix' => 'admin'), function()
{
//route for pages which are render after login
});
Route::get('/admin', function() {
return View::make('admin.loginform');
});
并在filter.php文件中编写以下代码
Route::filter('admin_ajax', function() {
if (!Auth::admin()->check()) {
return Redirect::to('admin/login');
} else {
}
});
如果您使用的是laravel 5.4
Route::get('/manage', function () {
return redirect('manage/login');
});
Route::group(['prefix' => 'manage'], function() {
//login bypass for the below listed controllers
Route::resource('login', 'AdminLoginController@showLoginForm');
Route::post('dologin', 'AdminLoginController@login');
});
您所能做的就是添加auth
中间件,如下所示:
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function() {
Route::get('/login','Auth\AdminLoginController@showLoginForm')->name('admin.login');
Route::post('/login','Auth\AdminLoginController@login')->name('admin.login.submit');
Route::get('/manifiesto','AdminController@getIndex')->name('admin.dashboard');
Route::get('/logout','Auth\AdminLoginController@logout')->name('admin.logout');
Route::get('/trabajadores','AdminController@showTrabajadores')->name('admin.trabajadores');
Route::get('/clientes','AdminController@showClientes')->name('admin.clientes');
Route::get('/proyectos','AdminController@showProyectos')->name('admin.proyectos');
Route::get('/administradores','AdminController@showAdmins')->name('admin.administradores');
});
但默认情况下,这将重定向到/login
,如果要覆盖此选项,根据是否有其他类型的用户使用/login
路由,您有两个chocie
- 如果没有人使用
/login
路线
1-您需要修改App\Http\Middleware\Authenticate::handle()
方法,并将/login
更改为admin/login
2-然后需要将$loginPath
属性添加到\App\Http\Controllers\Auth\AuthController
类中
验证
namespace App\Http\Middleware;
class Authenticate {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->guest())
{
if ($request->ajax())
{
return response('Unauthorized.', 401);
}
else
{
return redirect()->guest('admin/login'); // <--- here
}
}
return $next($request);
}
}
不要忘记在路由组中添加新的中间件,如下所示
Route::group(['prefix' => 'admin', 'middleware' => 'adminAuth'], function()
{
// your admin routes
});
Route::group(['prefix' => 'admin', 'middleware' => 'AdminAuth'], function()
{
// all admin routes
});
为管理员制作另一个中间件。遵循步骤
在app/Http/Middleware
location中创建一个名为AdminAuthenticate
的文件,并将Authenticate的内容复制到新文件中
将类名更改为AdminAuthenticate
更改handle函数的内容,如下所示
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/admin/login');
}
}
return $next($request);
}
在app/Http/Kernel.php文件
'AdminAuth' => \App\Http\Middleware\AdminAuthenticate::class,
现在一切都好了。只需在路由组中添加新的中间件,如下所示
Route::group(['prefix' => 'admin', 'middleware' => 'adminAuth'], function()
{
// your admin routes
});
Route::group(['prefix' => 'admin', 'middleware' => 'AdminAuth'], function()
{
// all admin routes
});
或者,您可以向每个管理控制器的构造函数中添加新的中间件,如下所示
$this->中间件('AdminAuth')代码>
试试这个Route::group(['prefix'=>'admin','middleware'=>'auth'],function(){..})
同样的问题,我有重定向到/loginIs的其他登录路径,或者只是admin/login
?只是admin/loginDid您在$routemidware
属性中将这个middlware添加到您的应用程序/Http/Kernel.php
?如果是,并且是这样的'adminAuth'=>\illumb\Auth\Middleware\AdminAuthenticate::class,
,那么您需要这样做Route::group(['prefix'=>'admin','Middleware'=>'adminAuth'],function(){……})
`如果我为你的代码替换我的代码,我会有相同的错误,所有路由都会转到/login而不是/admin/login。和www.mydomain.com/admin/login重定向到/login。同样的错误。如果我输入/admin/login error:Class'App\Http\Middleware\Auth'未找到我使用的是laravel 5.4,所以我在web.php中编辑第一个代码,在哪个文件中编辑第二个?如果你使用的是laravel 5.4,那么你必须定义MiddlewareHi maraboc,我用你在回答中所说的文件信息编辑我的问题。我在编辑它时遇到了相同的错误。请尝试使用此return redirect()->route('admin.login');//没有,伙计,没用。我只是让它没有中间件,我只是检查客人是否是管理员或只是一个客人。重定向工作正常,但有其他错误。我在这里发布了另一个问题的url。谢谢如果可以,选中chat@MarabocI edited my files,您可以签入答案。和以前一样的错误。请再次仔细阅读我的答案。完成中间件后,为管理面板添加新的中间件。将$this->middleware('AdminAuth')添加到每个管理控制器@LluísPuigFerrer的构造函数中
'adminAuth' => \App\Http\Middleware\YourNewMiddleware::class,
Route::group(['prefix' => 'admin', 'middleware' => 'adminAuth'], function()
{
// your admin routes
});
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/admin/login');
}
}
return $next($request);
}
'AdminAuth' => \App\Http\Middleware\AdminAuthenticate::class,
Route::group(['prefix' => 'admin', 'middleware' => 'AdminAuth'], function()
{
// all admin routes
});