Я делаю приложение для Android. У меня в плане есть разблокировка по обычному паролю, по паттерну, NFC и разблокировка по сложному паролю. Первые 3 вида авторизации это в серверной части обычный пароль. Не совсем понимаю как к этому прибавить еще функционал сложного пароля(есть пароль, и при запросе пользователю отправляется некоторое количество букв и их положение. На сервере введенные пользователем буквы сравниваюся с паролем из БД). Я хотел бы посоветоваться с вами, поскольку вы наверняка видите дальше меня относительно построения таблиц и реализации в laravel. Я не до конца понимаю, как мне лучше всего можно было бы реализовать хранение букв в таблице, или может есть еще какие-то способы для того, чтобы забирать из захешенного пароля буквы отдельно?
Смотри, авторизуясь по паролю или по "сложному" паролю (читай пароль), Лара под капотом сверяет кодированные значения с сохраненными в базе. Если значения совпадают, значит, пароль подошел.
При этом, если два раза подряд сделать
Hash::make('qwerty')
, то внешний вид символов будет абсолютно разным. Следовательно, дернуть из него "некоторое количество букв и положение" невозможно. Вдобавок, зачем тебе это? Чтобы так сделать, нужно хранить пароли в открытом виде, а это плохо.
Решил авторизовать по паролю? Дак пусть юзеры его и шлют. Делая сопоставление ты облегчаешь путь к взлому, так сказать.
В общем, хранить "отдельные буквы" - плохая затея. Лучше спрашивай у юзера пароль.
Дальше авторизуй либо встроенными методами, либо
вручную.
Также, в случае с мобильным приложением, рекомендую заюзать
JWT аутентификацию. Почему именно этот пакет? Его лара юзает "из коробки" и, следовательно, не будет N+1 лишних пакетов.
Суть проста - когда авторизуешь юзера "стандартным" методом, в ответ вернется токен для него. Сохраняешь его у юзера на мобиле и последующие запросы им подписываешь.