У меня есть как встроенный Laravel, так и социальная аутентификация. Предположим, если пользователь входит в систему с помощью Facebook, я сохраняю такие данные пользователя, как fb_id
, username
, email
и т. д. к таблице пользователей, которая является подлинной из встроенной системы входа в систему. Таким образом, я могу использовать laravel Auth
,
$fb_user = Socialite::driver('facebook')->user();
$user = User::firstOrCreate(['fb_id'=>$fb_user->id,'name' => $fb_user->name, 'email' => $fb_user->email]);
Auth::login($user, true);
return redirect('/');
Теперь в таблице users есть пользователь с именем пользователя и паролем NULL. Неужели никто не может войти, используя только имя пользователя из встроенного логина, если не требуется проверка пароля? ИЛИ что не так с моей концепцией здесь?
Никто не может войти в систему только с именем пользователя из встроенного входа, если нет
требуется подтверждение пароля?
Да, любой может войти.
Из комментариев:
Решение 1:
Пароль должен быть хеширован. Предполагая, что пустые пароли разрешены, они будут хэшировать что-то, что не является пустым (например, password_hash('',PASSWORD_DEFAULT);
возвращает что-то вроде $2y$10$MD7HZwh9oki9U74Ta1/7OuDpYK8UXAFEufgMIeNazKSyv1xRabwqu
) Поэтому не должно быть никаких проблем с этим методом.
Решение 2:
У нас должно быть поле для пометки пользователя как отдельного источника аутентификации. Таким образом, если кто-то пытается войти в систему напрямую, используя эти данные, вы можете игнорировать строки с этим флагом при проверке учетных данных.
Недавно я получил эту же проблему. Я рекомендую это:
Когда пользователь выбирает социальные сети для входа на ваш сайт, создайте свою учетную запись на своем сайте, используя информацию, полученную с сайта социальных сетей после аутентификации, и зарегистрируйте их на своем сайте. Теперь, как только они войдут, покажите им всплывающее окно, чтобы установить пароль для своей учетной записи.
Теперь можно использовать как встроенную в Laravel, так и социальную аутентификацию для входа в систему.