Laravel 5.6 multi auth продолжает аутентификацию по модели по умолчанию

У меня есть два входа в таблицу: испытуемый и компания. компания - моя авторизация по умолчанию, каждый раз, когда я пытаюсь выполнить аутентификацию у экзаменуемого, он продолжает использовать таблицу по умолчанию, которая является компанией.

Я видел несколько проблем, похожих на мою, но, похоже, для меня это не работает, или я мог пропустить что-то, что, возможно, некоторые из вас могли бы увидеть.

Что я делаю неправильно?

Auth.php:

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

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'companies',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'companies',
    ],
    'examinees' => [
        'driver' => 'session',
        'provider' => 'examinees',
    ],
],

'providers' => [
    'companies' => [
        'driver' => 'eloquent',
        'model' => App\Company::class,
    ],
    'examinees' => [
        'driver' => 'eloquent',
        'model' => App\Examinee::class,
    ],
],

'passwords' => [
    'companies' => [
        'provider' => 'companies',
        'table' => 'password_resets',
        'expire' => 60,
    ],
    'examinees' => [
        'provider' => 'examinees',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],

LoginController:

public function showLoginForm()
{
    return view('examinee.auth.login');
}

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

public function login(Request $request) {
    $user = Examinee::where('email', $request->get('email'))->first();

    if (Auth::attempt(['id' => $user->id, 'password' => $request->get('password')])) {

        // prints data from Company table instead of Examinee...
        echo "AUTH USER:<pre>";
        print_r(Auth::user());
        echo "</pre>";
        // return redirect('/home');
    }
}

Модель:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Examinee extends Authenticatable
{
    use Notifiable;

    protected $table = 'examinees';
    protected $fillable = ['email',  'password'];
    protected $hidden = ['password',  'remember_token'];

    public $timestamps = false;

}
0
0
476
1

Ответы 1

Как я делал это в прошлом, так это добавлял охрану к вашей авторизации.

Изменять Auth::attempt(['id' => $user->id, 'password' => $request->get('password')

к Auth::guard('examinees')->attempt(['id' => $user->id, 'password' => $request->get('password')

Я только что понял, что пробовал это раньше, и я запутался, потому что он говорит, что я вошел в систему, но Auth :: user () ничего не показывает. Оказывается, мне нужно использовать Auth :: guard ('экзаменуемые') -> user (), чтобы получить данные аутентификации. Но означает ли это, что я должен каждый раз добавлять охранника?

aishi 12.04.2018 04:36

Другие вопросы по теме