как сделать логин с двумя разными таблицами в зависимости от того, введет ли пользователь адрес электронной почты или псевдоним? - PullRequest
1 голос
/ 04 марта 2020

Я работаю с Laravel впервые, я пытаюсь войти в систему, в зависимости от того, введет ли пользователь адрес электронной почты или псевдоним в том же вводе. База данных содержит, помимо прочего, 2 таблицы: одну Users с полем электронной почты и другую Profile с ником и идентификатором, который является внешним ключом от Users, во входном окне вводятся по мере поступления. с изменением ввода электронной почты только с типа email на текст, чтобы пользователь мог ввести либо адрес электронной почты, либо псевдоним, затем я попробовал разные способы, последнее, что я попробовал, - это включение провайдера в аутентификацию. php вот так :

   'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'profiles' => [
            'driver' => 'session',
            'provider' => 'profiles',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

затем я попытался переопределить попыткуLogin в LoginController следующим образом:

    public function attemptLogin(Request $request)
    {

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

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

Любая помощь очень ценится, так как я новичок в Laravel, и я вроде потерянная

1 Ответ

1 голос
/ 04 марта 2020

Я никогда не пробовал этого раньше, но вот несколько советов:

Взгляните на ваш файл config/auth.php, а точнее на раздел User Providers. Там вы можете изменить модель, которая представляет пользователя в зависимости от провайдера.

Вам также может понадобиться обновить поле, которое вы используете для идентификации пользователя, для этого проверьте признак \Illuminate\Foundation\Auth\AuthenticatesUsers, более конкретно метод \Illuminate\Foundation\Auth\AuthenticatesUsers::username. Обычно мы можем перезаписать его в контроллере, но вы можете изменить его в промежуточном программном обеспечении, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...