@SM_ST

Авторизация пользователя по номеру телефона и смс коду?

Добрый день
Задача:
Сделать авторизацию по номеру телефона без пароля, то есть пользователь вводит пароль, ему на телефон идет код, если код верен, то авторизуем его в системе, если нет, то ошибку

на текущий момент реализовал так, но верно ли?

public function login(Request $request)
    {

        $sms = SmsCode::where('code', '=', $request->code)->where('is_check', '=', 0)->first();
        
        if (!$sms) return response()->json(['error' => false, 'message' => 'Неверный код']);

        $user = User::where('phone', '=', $sms->phone)->first();

        if (empty($user)) {
            if (!$sms) return response()->json(['error' => false, 'message' => 'Пользователь отсутствует']);
        }

        if(! $token = Auth::login($user)){
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        $sms->is_check = 1;
        $sms->updated_at = Carbon::now();
        $sms->save();

        return $this->createNewToken($token);
    }
  • Вопрос задан
  • 1801 просмотр
Пригласить эксперта
Ответы на вопрос 4
Sanes
@Sanes
Такие вещи обычно делаются через Middleware. Есть же пример verified.
Ответ написан
1. Человек в первой форме регистрации вводит лишь свое имя и телефон
2.Контроллер проверяет, есть ли такой номер телефона в БД, если нет, то идем дальше
3. Генерируем 6-значный код для подтверждения телефона, через сторонний API отсылаем смску на телефон, а также сохраняем данный код в сессию пользователя.
4. На фронте показываем ему следующий экран, т.е. форму ввода кода подтверждения.
5. Человек вводит код, он зарегистрирован (дальше все действия понятны
Ответ написан
@jazzus
Создать LoginRequest прописать там указанные проверки смс и юзера(custom rule, exists зависит от логики) и сообщения.

Зачем нужно это
if(! $token = Auth::login($user)){
    return response()->json(['error' => 'Unauthorized'], 401);
}

непонятно
знак = в where можно не ставить
empty в if можно не использовать
updated_at и так обновляется при обновлении модели.
Ответ написан
Комментировать
@Kostik_1993
Web Developer
Есть вариант бомбовый, но требует навыков немного, я делал на нескольких сайтах вход по телефону на firebase
У них есть SDK для PHP, а также готовая реализация на фронте. Все что нужно это выпонить аутентификацию на фронте по телефону, далее от firebase прилетает токен, токен отправляете на бек, с помощью PHP SDK с бека отправляете запрос на получение пользователя по токену, приходит в ответ юзер и его телефон, ищете пользователя в базе по номеру и логините его. Как бонус получаете 10 тысяч бесплатных входов в месяц на все номера и еще 10 тысяч на номера из США
Тоесть экономите 20-30 тысяч в месяц на смсках
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы