我正在尝试为 user 和 admin 实现 laravel 5.2 多重身份验证。但是未定义身份验证用户提供程序 [] 错误给出

Posted

技术标签:

【中文标题】我正在尝试为 user 和 admin 实现 laravel 5.2 多重身份验证。但是未定义身份验证用户提供程序 [] 错误给出【英文标题】:I am trying to implement laravel 5.2 multiple authentication for user and admin . But authentication user provider[] is not defined error is given 【发布时间】:2016-09-16 14:03:12 【问题描述】:

我已经关注了这个问题 Can anyone explain Laravel 5.2 Multi Auth with example

使用 admin 和 user table 实现多表身份验证。我已经完成了上述所有步骤,例如添加 admin 作为提供者,在 config/auth.php 中保护,为 admin 创建 auth 控制器,为 admin 创建中间件。但是在我运行我的项目之后,它说身份验证用户提供者 [] 没有定义。但是我在 config/auth.php 中为管理员和用户定义了提供程序。我使用了不同的登录和注册表单,用户和管理员的控制器。当用户或管理员登录时,我想在导航栏中显示用户或管理员名称。为此,我使用了 laravel docs(主文件 html 附件中的代码)中所述的 auth guard。我已经坚持这个错误 6 天了。我急切需要你的帮助。这是我的附件 配置/auth.php

    return [



'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],



'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
    'user' =>[
    'driver' => 'session',
    'provider' => 'user',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],



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

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],



'passwords' => [
    'users' => [
        'provider' => 'users',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
        'admins' => [
        'provider' => 'admin',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],

];

routes.php

    <?php


Route::get('/', function () 
    return view('welcome');
);

Route::auth();

Route::get('/home', 'HomeController@index');

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

    // Registration Routes...
    Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm');
    Route::post('admin/register', 'AdminAuth\AuthController@register');

    Route::get('/admin', 'AdminController@index');

); 

app/Http/Controllers/AdminAuth/AuthController.php

namespace App\Http\Controllers\AdminAuth;

use App\Admin;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

class AuthController extends Controller



    use AuthenticatesAndRegistersUsers, ThrottlesLogins;


    protected $redirectTo = '/admin';
    protected $guard = 'admin';
    //protected $redirectTo = '/';

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    
        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    


    protected function validator(array $data)
    
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    

            protected function create(array $data)
    
        return Admin::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    
    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');
     

Admin.php

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;


class Admin extends Authenticatable


    protected $fillable = [
        'name', 'email', 'password',
    ];


    protected $hidden = [
        'password', 'remember_token',
    ];

AdminController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use Illuminate\Contracts\View\View;

class AdminController extends Controller


    protected $guard =  'admin';

     public function __construct()
        $this->middleware('admin');
    
    public function index()
        return view('admin.home');
    


管理中间件

<?php

namespace App\Http\Middleware;

use Closure;

class RedirectIfNotAdmin


    public function handle($request, Closure $next, $guard = 'admin')
    
        if (!Auth::guard($guard)->check()) 
            return redirect('/');
        

        return $next($request);
    

显示管理员的主布局

<!-- Authentication Links -->
                    @if (Auth::guard('admin')->guest())
                        <li><a href=" url('/login') ">Login</a></li>
                        <li><a href=" url('/register') ">Register</a></li>
                    @else
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                                 Auth::guard('admin')->user()->name  <span class="caret"></span>
                            </a>

                            <ul class="dropdown-menu" role="menu">
                                <li><a href=" url('/logout') "><i class="fa fa-btn fa-sign-out"></i>Logout</a></li>
                            </ul>
                        </li>
                    @endif

【问题讨论】:

请发布一个更简化的问题描述,使用最小的文件集和配置选项仍然显示您遇到的问题。否则没有人会整理你所有的文件。 【参考方案1】:

我认为这会有所帮助。 http://blog.sarav.co/multiple-authentication-in-laravel/

您为什么不尝试使用内置的用户模型并使用它扩展管理员。

【讨论】:

你的博客链接确实成功了。虽然我之前检查过。经过第二次检查后,我了解到这是一篇简短的文章。我必须做他们所说的所有事情,然后只考虑获取管理员凭据并将其传递给控制器​​以检查和登录 admin 。非常感谢。

以上是关于我正在尝试为 user 和 admin 实现 laravel 5.2 多重身份验证。但是未定义身份验证用户提供程序 [] 错误给出的主要内容,如果未能解决你的问题,请参考以下文章

如何使用2个模型User / Admin rails创建Post模型?

在类 Index(TemplateView) 中使用 request.user

将新管理员添加到活动管理员

PHP切换与GET请求

基于用户角色的 Laravel voyager 策略

如何在 Django Admin 中为作为方法//属性的字段重命名列标签?