Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当用户未登录时,Laravel重定向到特定路由_Php_Laravel - Fatal编程技术网

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