谁能帮助我如何在laravel 5.6中制作多种身份验证,我已经读过这个How to create multi auth in laravel 5.6?但仍然无法理解。请帮助我。
这家伙摇滚...我学会了如何使用这个YouTube视频进行多次验证,它有点长,但它肯定会让你为管理员和用户进行身份验证,如果这是你想要的。
这是我为本教程视频制作的备忘单。当您厌倦了在视频上输入所有内容时,请参考它。但是,我强烈建议观看视频,只是看一下这些说明可能还不够。
基本身份验证和管理模型
php artisan make:auth
php artisan make:migration create_admins_table --create=admins
数据库/迁移/ ??? _ create_admins_table.php
public function up()
{
Schema::create('admins', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
将用户模型复制到管理模型
user.php的
admin.php的
在auth.php中为Admin保护
配置/ auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'token',
'provider' => 'admins',
],
],
**Create provider for Admin**
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
],
**Create password resets for admin**
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
],
],
将Admin Guard应用于管理模型
应用/ admin.php的
protected $guard = 'admin’;
制作AdminContoller
复制HomeController - > AdminController
应用程序/ HTTP /控制器/ AdminController.php
public function __construct()
{
$this->middleware('auth:admin');
}
制作AdminLoginController
php artisan make:controller Auth/AdminLoginController
制作管理员登录视图
重复login.blade.php - > admin-login.blade.php
资源/视图/管理,login.blade.php
登录 - >管理员登录
route(‘login’) -> route(‘admin.login.submit’)
管理路线设置
路线/ web.php
Route::prefix('admin')->group(function() {
Route::get('/', 'AdminController@index’)->name(‘admin.dashboard');
Route::get('/login', 'Auth\AdminLoginController@showLoginForm')->name('admin.login');
Route::post('/login', 'Auth\AdminLoginController@login')->name('admin.login.submit');
});
使AdminLoginController登录
应用程序/ HTTP /控制器/认证/ AdminLoginController.php
public function __construct()
{
$this->middleware('guest:admin', ['except' => ['logout']]);
}
public function showLoginForm()
{
return view('auth.admin-login');
}
public function login(Request $request)
{
// Validate the form adata
$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 sucessful, the redirect to their
return redirect()->intended(route('admin.dashboard'));
}
//if unseccessful
return redirect()->back()->withInput($request->only('email', 'remember'));
}
public function logout()
{
Auth::guard('admin')->logout();
return redirect('/');
}
解决重定向错误1
应用/例外/ Handler.php
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'unauthenticated'], 401);
}
$guard = array_get($exception->guards(),0);
switch ($guard) {
case 'admin':
$login = 'admin.login';
break;
default:
$login = 'login';
break;
}
return redirect()->guest(route($login));
}
解决重定向错误2
应用程序/ HTTP /中间件/ RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
switch($guard) {
case 'admin':
if(Auth::guard($guard)->check()) {
return redirect()->route('admin.dashboard');
}
break;
default:
if(Auth::guard($guard)->check()) {
return redirect()->route('/home');
}
}
return $next($request);
}
更新laravel项目的配置缓存
php artisan config:cache
希望能帮助到你 :)