Laravel 5.2 需要一个实现默认身份验证驱动程序的示例/"Multi-Auth"。现在需要大量的工作

Laravel 5.2 need an example which implements default Authentication Drivers / "Multi-Auth". which needs lots of works right now as

身份验证驱动程序/"Multi-Auth"

在 laravel 5.2 发布之前,它表示开箱即用的多重身份验证支持。但是没有任何示例代码显示如何使用不同的驱动程序和路由进行身份验证。所以我需要帮助使用默认 laravel 5.2

设置多重身份验证

创建两个新模型:App\AdminApp\User。更新config/auth.php

return [
    'defaults' => [
        'guard' => 'user',
        'passwords' => 'user',
    ],
    'guards' => [
        'user' => [
            'driver' => 'session',
            'provider' => 'user',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],
    ],
    'providers' => [
        'user' => [
            'driver' => 'eloquent',
            'model' => 'App\User',
        ],
        'admin' => [
            'driver' => 'eloquent',
            'model' => 'App\Admin',
        ],
    ],
    'passwords' => [
        'user' => [
            'provider' => 'user',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admin' => [
            'provider' => 'admin',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ]
    ]
];

在kernel.php

    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,

            //\App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'api' => [
            'throttle:60,1',
        ],
    ];

并在 Route.php 中设置以下代码并测试

    Route::get('/login', function() {
        $auth = auth()->guard('admin');

        $credentials = [
            'email' =>  'admin@gmail.com',
            'password' =>  'password',
        ];

        if ($auth->attempt($credentials)) {
            return redirect('/profile');
        } 
    });



    Route::get('/profile', function() {
            if(auth()->guard('admin')->check()){
                 print_r(auth()->guard('admin')->user()->toArray());
            } 

            if(auth()->guard('user')->check()){
                print_r(auth()->guard('user')->user()->toArray());
            }
        });

使用rajpurohit-dinesh例子,我们只需要完成第一步:

1: 创建一个 App\Admin 模型(在我们的应用程序文件夹中)。这是您的 Authenticatable class.

应该如何
<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

Class Admin extends Authenticatable
{
//
}

2:更新 config/auth.php.

return [
    // This is the default guard used, not need to declare
    // another guard here
    'defaults' => [
        'guard' => 'user',
            'passwords' => 'user',
    ],

    // Here we must to declare the guards, if we created the App\Admin
    // class as first step, we don't need to create a custom guard
    'guards' => [
        'user' => [
            'driver' => 'session',
            'provider' => 'user',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],
    ],
    // In this example we are using only 'eloquent' driver
    'providers' => [
        'user' => [
            'driver' => 'eloquent',
            'model' => 'App\User',
        ],
        'admin' => [
            'driver' => 'eloquent',
            'model' => 'App\Admin',
        ],
    ],
    'passwords' => [
        'user' => [
            'provider' => 'user',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admin' => [
            'provider' => 'admin',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ]
    ]
];

3:为了测试它,我们可以使用我们的 app\Http\Route.php 文件:

Route::get('/login', function() {
    $auth = auth()->guard('admin');

    $credentials = [
        'email' =>  'admin@gmail.com',
        'password' =>  'password',
    ];

    if ($auth->attempt($credentials)) {
        return 'Success';
    } else {
        return 'Not Success';    
});

感谢 HoLiC 的回答,它现在可以正常工作,但是您可以尝试用 类 实现它吗 Laravel 带来的开始?您只需添加路线:

Route::controller('/auth', 'Auth\AuthController');
Route::controller('/password', 'Auth\PasswordController');

并根据上面的 post 在 resources/views/auth/login.blade.php 中创建表单。在此之后,您可以使用路线 laravel.dev/auth/login 和 laravel.dev/auth/logout

Starter auth 机制无法正常工作,并且与 multi auth 不兼容。如果你检查你可以通过 laravel.dev/auth/login 登录,但只有用户(没有任何方法可以在 AuthController 或任何使用管理员的地方设置)并且注销操作不起作用。如果你检查这个特征 Illuminate\Foundation\Auth\AuthenticatesUsers 你会发现这个机制现在没有用,例如注销方法没有在任何地方定义 provider admin:

Auth::logout(); // not working logout should be smth like Auth::guard($provider)->logout();