@serjioms

Php авторизация пользователя. Что есть best practices?

Я сейчас реализую некое API, и мне от пользователя в заголовке запроса Каждый Раз приходит логин и пароль. Как правильно реализовать авторизацию пользователя используя OOP & best practices?

Пока что я делаю так: Auth::login($login, $pass); Статическая функция возвращает true или false. Фактически в классе сейчас лишь одна функция, но в перспективе добавятся еще.

Мне подсказали, что это не `кошерный` вариант. Профи, кто давно пишет на php, подскажите или дайте ссылку на правильный вариант.
  • Вопрос задан
  • 3228 просмотров
Пригласить эксперта
Ответы на вопрос 3
Вам нужно использовать сессии. Вместо того чтобы каждый раз присылать login, и pass - пусть лучше клиент шлет token сессии. Если использовать нативную реализацию сессии - то id сессии присылается в cookie. Можно использовать самописный механизм, в таком случае клиенту всегда нужно будет слать token.
По-сути всё это практически то же самое что и в каждом запросе присылать логин/пароль. Но мне в своей практике не доводилось встречать реализацию с отсылкой логина и пароля при каждом запросе. Поэтому смею предположить что никто так не делает :) Используйте токен, и тогда клиентам не придется светить логин/пароль при каждом запросе :)
Ответ написан
akubintsev
@akubintsev
Опытный backend разработчик
С учётом того, что у вас наверняка имеются контроллеры, а в любом случае передаётся пара логин-пароль для авторизации, то самым разумным было бы вынести в базовый класс метод auth(HttpRequest $request)
Ответ написан
Комментировать
riky
@riky
Laravel
лучше отправлять токен вместо пары логин/пароль, из соображений безопасности. если ктото слушает трафик то пара логин пароль - дает ему доступ навсегда и отовсюду, в том числе может авторизоваться через веб интерфейс.

для получения токена пароль передается только один раз, его конечно тоже могут перехватить, но шансы меньше + для запроса авторизации можно использовать https

токен же действует ограниченное время и может не давать всех возможностей системы.

токен дает доступ только к апи. и например через апи злоумышленник не сможет сменить пароль пользователя. + токен удобен тем что может выдаваться на определенные права. например для одного токена есть доступ только к списку друзей пользователя, а через другой и к его личным сообщениям.

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

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

2) как уже заметили статик методы это зло. даже если вы используете классы и пишете на статиках все это совсем не ООП а обычный процедурный подход - те же самые функции. сам когда то таким болел.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы