Модель менеджера аутентифицирована, и вы можете получить объект менеджера, прошедшего аутентификацию

от вопрос уже есть ответ здесь:

Может ли кто-нибудь объяснить Laravel 5.2 Multi Auth с примером 3 ответа

Насколько я знаюAuth::attempt используется для аутентификации пользователей изusers таблица, но я хочу аутентифицировать других пользователей изmanagers стол и админ изadmins Таблица. Я знаю, что естьlaravel-multiauth Плагин уже существует. Но можем ли мы создать свой собственныйAuthServiceProvider для аутентификации пользователей из нескольких таблиц ..?

Ответы на вопрос(4)

Решение Вопроса

Сначала создайте Admin Authenticatable вIlluminate\Foundation\Auth любить

    <?php

namespace Illuminate\Foundation\Auth;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

    class Admin extends Model implements
        AuthenticatableContract,
        AuthorizableContract,
        CanResetPasswordContract
    {
        use Authenticatable, Authorizable, CanResetPassword;
    }

Затем создайте модель администратора, расширивAuthenticatable Модель администратора: -

  <?php
namespace App;
use Illuminate\Foundation\Auth\Admin as Authenticatable;

class Admin extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

После этого вам нужно изменитьconfig/auth.php как ниже Добавить впровайдеры массив

'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ], 

и добавить вгвардия массив.

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

Теперь для аутентификации изпользователь Таблица

 if (Auth::guard('user')->attempt(['email' => $email, 'password' => $password])) {
        $details = Auth::guard('user')->user();
        $user = $details['original'];
        return $user;
    } else {
        return 'auth fail';
    }

И аутентифицироваться изАдминистратор Таблица

 if (Auth::guard('admin')->attempt(['email' => $email, 'password' => $password])) {
        $details = Auth::guard('admin')->user();
        $user = $details['original'];
        return $user;
    } else {
        return 'auth fail';
    }
 cooper12 дек. 2018 г., 21:22
Где я должен положить ваш последний код? (для аутентификации)
 Prasanna Mane02 февр. 2019 г., 15:32
Где я должен положить ваш последний код? (для аутентификации)
 Nitish Patra01 мар. 2019 г., 05:32
Вы можете поместить вышеуказанный код в свой LoginController

table имеет разныеusers, Потому что это не будет работать, если у вас есть то же самоеuser в других таблицах.

Выберите таблицу приоритетов (например, пользователи)Добавить условиеif(Auth::user(attempt(...))elseif(Auth::manager(attempt(...))elseif(Auth::admins(attempt(...)))

Примечание: ваша таблица приоритетов здесьusersзатем, если пользователь не существует в этой таблице, он попытаетсяmanagers таблицу, то, если она еще не существует, она проверитadmins таблица, в противном случае (используйтеelse) вернуть сообщение об ошибке.

Другой вариант:

Другой вариант - использовать этот пакетsarav/laravel-multiauth, Вы можете следовать этой теме.Как использовать аутентификацию для нескольких таблиц в Laravel 5 для дополнительной информации.

Больше ссылки:

https://laracasts.com/discuss/channels/general-discussion/using-laravel-auth-for-multiple-tables?page=1

Может кто-нибудь объяснить Laravel 5.2 Multi Auth с примером

https://laracasts.com/discuss/channels/laravel/52-auth-multiple-tables?page=1

 RAUSHAN KUMAR21 сент. 2017 г., 08:38
Спасибо за ответ

модель должна расширятьсяIlluminate\Foundation\Auth\User

Вconfig/auth.php,

Добавьте к массиву провайдеров:

'managers' => [
    'driver' => 'eloquent',
    'model' => App\Manager::class,
 ],

Добавьте к массиву охранников:

'web_manager' => [
    'driver' => 'session',
    'provider' => 'managers',
 ],

Затем. вLoginController (создайте для менеджера, используяphp artisan make:auth) использовать чертуIlluminate\Foundation\Auth\AuthenticatesUsers и переопределить свойства защиты и перенаправления.

protected $redirectTo = 'redirect_path_after_manager_login';

protected function guard()
{
  return Auth::guard('web_manager');
}

Модель менеджера аутентифицирована, и вы можете получить объект менеджера, прошедшего аутентификациюAuth::guard('web_manager')->user();

у каждого из которых будет свой поставщик. Поставщики определяют таблицу или модель для использования.

Вconfig/auth.php вы настраиваетеproviders следующим образом, и вы также настроить соответствующийguards для каждого из этих провайдеров:

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

Тогда вы можете аутентифицироваться так:

Auth::attempt($credentials) // use default guard for simple users
Auth::guard('manager')->attempt($credentials)
Auth::guard('admin')->attempt($credentials)

Проверьте документыВот.

Ваш ответ на вопрос