2016-01-15 46 views
1

我已经做了多重验证,但是我最终的代码有问题。我有这样的代码如何在Laravel 5.2中创建多重身份验证

php artisan make:auth 

它会生成用户表的基本登录/注册路由,视图和控制器。

为简单起见,将用户表制作为管理员表。

控制器对于管理员 应用程序/ HTTP /控制器/ AdminAuth/AuthController 应用程序/ HTTP /控制器/ AdminAuth/PasswordController :

(注意我刚刚从应用程序/ HTTP /控制器/认证/ AuthController这里复制这些文件)

配置/ auth.php

//Authenticating guards 
'guards' => [ 
    'user' =>[ 
     'driver' => 'session', 
     'provider' => 'user', 
    ], 
    'admin' => [ 
     'driver' => 'session', 
     'provider' => 'admin', 
    ], 
], 

//User Providers 
'providers' => [ 
    'user' => [ 
     'driver' => 'eloquent', 
     'model' => App\User::class, 
    ], 
    'admin' => [ 
     'driver' => 'eloquent', 
     'model' => App\Admin::class, 
    ] 
], 

//Resetting Password 
'passwords' => [ 
    'clients' => [ 
     'provider' => 'client', 
     'email' => 'auth.emails.password', 
     'table' => 'password_resets', 
     'expire' => 60, 
    ], 
    'admins' => [ 
     'provider' => 'admin', 
     'email' => 'auth.emails.password', 
     'table' => 'password_resets', 
     'expire' => 60, 
    ], 
], 

route.php

Route::group(['middleware' => ['web']], function() { 
    //Login Routes... 
    Route::get('/admin/login','AdminAuth\[email protected]'); 
    Route::post('/admin/login','AdminAuth\[email protected]'); 
    Route::get('/admin/logout','AdminAuth\[email protected]'); 

    // Registration Routes... 
    Route::get('admin/register', 'AdminAuth\[email protected]'); 
    Route::post('admin/register', 'AdminAuth\[email protected]'); 

    Route::get('/admin', '[email protected]'); 

}); 

AdminAuth/AuthController.php

添加两种方法,并指定$ redirectTo和$后卫

protected $redirectTo = '/admin'; 
protected $guard = 'admin'; 
public function showLoginForm() 
{ 
    if (view()->exists('auth.authenticate')) { 
     return view('auth.authenticate'); 
    } 

    return view('admin.auth.login'); 
} 
public function showRegistrationForm() 
{ 
    return view('admin.auth.register'); 
} 

它会帮助你打开另一登录表单的管理

为管理员创建一个中间件

class RedirectIfNotAdmin 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @param string|null $guard 
* @return mixed 
*/ 
public function handle($request, Closure $next, $guard = 'admin') 
{ 
    if (!Auth::guard($guard)->check()) { 
     return redirect('/'); 
    } 

    return $next($request); 
} 
} 

kernel.php中的注册中间件

protected $routeMiddleware = [ 
    'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class, 
]; 
use this middleware in AdminController e.g., 
namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Auth; 

class AdminController extends Controller 
{ 
    public function __construct(){ 
     $this->middleware('admin'); 
    } 
public function index(){ 
     return view('admin.dashboard'); 
    } 
} 

这段代码是什么意思Auth::guard('admin')->user()?我在哪里输入该代码?

回答

1

这段代码的含义是什么Auth :: guard('admin') - > user()?

在简单的一句话,验证::后卫(“管理员”) - >用户()的时候,你需要获得的登录用户的详细信息使用。但是,在多身份验证系统中,可以有两个登录用户(管理员/客户端)。所以你需要指定你想得到的用户。所以通过后卫('admin'),你告诉从admin表中获取用户。

我在哪里输入该代码?

从答案,你可以明白,你必须在哪里使用它。但我仍然可以用例子来解释。假设有多个管理员。每个人都可以批准用户请求(如帖子/评论等)。因此,当管理员批准任何请求时,要将该管理员的id插入批准的帖子列中,您必须使用此行。