Laravel 5.2 нужен пример, который реализует драйверы аутентификации по умолчанию / "Multi-Auth". который требует много работ прямо сейчас, как

php laravel authentication laravel-5.2

13950 просмотра

3 ответа

774 Репутация автора

Драйверы аутентификации / "Multi-Auth"

как и до релиза laravel 5.2, указано, что multi auth поддерживается из коробки. но нет примеров кодов, показывающих, как проходить аутентификацию, используя разные драйверы с маршрутами. Поэтому мне нужна помощь в настройке мульти-аутентификации с использованием laravel 5.2 по умолчанию.

Автор: msonowal Источник Размещён: 22.12.2015 10:40

Ответы (3)


6 плюса

1793 Репутация автора

Решение

Создайте две новые модели: App\Adminи App\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());
            }
        });
Автор: DsRaj Размещён: 22.12.2015 12:49

1 плюс

126 Репутация автора

Используя пример rajpurohit-dinesh, нам просто нужно закончить первый шаг:

1: Создать модель App \ Admin (в нашей папке приложений). Вот как должен быть ваш класс Authenticatable.

<?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 Размещён: 30.12.2015 06:57

-1 плюса

4 Репутация автора

Спасибо за ответ HoLiC, он работает прямо сейчас, но можете ли вы попытаться реализовать его с помощью классов, которые Laravel принесет на старте? Вам просто нужно добавить маршруты:

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

и создайте форму в ресурсах / views / auth / login.blade.php из моего поста выше. После этого вы можете использовать маршруты laravel.dev/auth/login и laravel.dev/auth/logout

Механизм аутентификации стартера не работает должным образом и не совместим с мульти аутентификацией. Если вы проверите, вы можете войти через laravel.dev/auth/login, но только через пользователя (нет никакого способа настроить в AuthController или где-либо еще использовать администраторов) и действие выхода из системы не работает. Если вы отметите эту черту Illuminate \ Foundation \ Auth \ AuthenticatesUsers, то увидите, что этот механизм сейчас бесполезен, например, метод выхода из системы нигде не определяет администратора провайдера:

Auth::logout(); // not working logout should be smth like Auth::guard($provider)->logout();
Автор: bartw2k9 Размещён: 30.12.2015 09:47
Вопросы из категории :
32x32