GitHub – nutnetru/laravel-sms: Package for sending SMS from your Laravel app / Пакет для отправки смс из вашего приложения Laravel

Что мы строим

Вы можете узнать, что происходит в мире прямо сейчас, в этом потоке 2FA.

Сейчас приложение имеет демо-версию на GitHub.

Введение

Наше приложение Laravel SMS будет выполнено:

composer create-project --prefer-dist laravel/laravel laravel-sms
cd laravel-sms


Далее, добавим

Используя composer.json

"require": {
    ...,
    "nexmo/laravel": "dev-master as 1.0",
    "nexmo/client": "dev-master as 1.0"
},

Теперь, чтобы автоматически получать nexmo/Laravel при выходе пакетов из бета-версии, достаточно просто включить его.

Мы включили neckme поставщика услуг в файл конфигурации Nexmo:

'providers' => [
    ...,
    NexmoLaravelNexmoServiceProvider::class
]

Если вы хотите использовать фасад, его можно добавить в псевдонимы.

Установите пакеты, а затем продублируйте конфигурационный файл Nexmo.

› composer update
php artisan vendor:publish

В последнюю очередь добавьте ключ API Nexmo API Key и Secret.

/config/nexmo.php

Если вы хотите изменить идентификаторы API_KE или Api SECRET в результате их идентификации.

в Nexmo Dashboard.

'api_key' => 'API_KEY',
'api_secret' => 'API_SECRET',

В.env и enva(.) могут быть объявлены значения. которые вы хотите.

Начинаем

Генерация моделей и миграций – это очень трудоемкая часть подготовительной работы. Я принял решение дать вам немного времени, поэтому я создал репозиторий “Kuick Start”.

Чтобы запустить репозиторий Deskmo на Github после их добавления, сначала откройте его в своем аккаунте. После этого поместите бранч с начальным скаффолдингом на свой компьютер. В этом бранче все необходимые модели, миграции и формы уже сгенерированы.

Let’s begin

Я предполагаю, что composer уже установлен на вашем компьютере. В противном случае щелкните по этой ссылке, чтобы загрузить composer.

Laravel можно загрузить и установить с помощью:1. установите Laravel 2. создайте проект в композиторе.

Для целей данного учебника я выберу второй вариант, потому что он, как показывает практика, проще.

Используйте терминал для выполнения следующей команды.

composer create-project — prefer-dist laravel/laravel send-sms

Когда вы запустите вышеупомянутую команду из предпочитаемой папки разработки или любой другой локальной папки, она создаст новый каталог (папку) под названием “send-sms” в этом местоположении.

Ваш новый проект Laravel теперь должен называться “send-sms”. Это название нашего прямого проекта, но вы можете дать ему другое имя, если хотите.

Директорию вашего нового проекта, изменив ее

cd send-sms

Используйте приведенную ниже команду Artisan, чтобы запустить встроенный сервер разработки PHP для обслуживания вашего приложения:

php artisan serve

Автоматический ответ на входящее sms


И, наконец, давайте создадим автоответчик для входящего сообщения. Клиент Nexmo PHP обеспечивает хороший способ сделать это с помощью функции

InboundMessage->createReply

Route::post('/sms/receive', function(NexmoClient $nexmo){
    $message = NexmoMessageInboundMessage::createFromGlobals();
    Log::info('got text: ' . $message->getBody());
    $reply =$nexmo->message()->send($message->createReply('Laravel Auto-Reply FTW!'));
    Log::info('sent reply: ' . $reply['message-id']);
});

Вы получите автоматизированный ответ, если отправите сообщение на арендованный номер.

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

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

Теперь, когда это было сделано, точно ли это так?

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);
    }

Аутентификация лесов

Помните, что в Laravel есть команда для защиты процесса аутентификации перед созданием миграции. Результаты выглядят следующим образом:

  • Ввод, сохранение и сброс паролей зрителей и контроллеров.
  • Требуются маршруты.

С помощью командной строки запустите php-artisan make:auth.

Добавление twilio

Мы настроили Twilio перед отправкой кода пользователю по SMS. Требуется свежий пробный аккаунт.

После этого скопируйте адрес вашей учетной записи со страницы консоли Twilio. Последним шагом будет настройка нового телефонного номера для отправки SMS. Создайте новый телефонный номер и выберите номер консоли.

TWILIO_SID=XXXXXXXXXXX TWILIO_TOKEN=XXXXXXXXXXXX TWILIO_NUMBER= XXXXXXXXXX

Мы можем использовать официальный пакет Twilio PHP.

composer require twilio/sdk

. Для этого нам нужно создать новый провайдер и привязать его к контейнеру:

pgp artisan make:provider TwilioProvider

На этом этапе возвращаемся к методу sendCode:

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

Теперь приложение завершено. Создав нового пользователя и попытавшись войти в систему, мы можем оценить ситуацию. Вот краткая иллюстрация:

Использование в связке с laravel notifications

Пакет включает в себя канал для Laravel Notifications (NutnetLaravelSmsNotificationNutnetSmsChannel).

Конфигурирование

В НИМАНИЕ: В обновлении 0.8.1 изменился формат файла конфигурации! Не забудьте обновить конфигурацию, если вы обновились с более ранней версии.

Листинг, поиск и аренда номеров

Достаточная глушь была одним из требований для этого урока.

. Он может использоваться для различных вещей, включая телефонные номера (виртуальные имена), связанные с нашими учетными записями. CLI должен быть установлен и настроен, если он еще не установлен.

API_KEYAPI_SECRET

Чтобы заменить ранее использовавшиеся учетные данные API:

› npm install -g nexmo-cli
nexmo setup API_KEY API_SECRET

Теперь мы можем посмотреть, какие из номеров, к которым у нас есть доступ, уже были арендованы, и отменить аренду конкретного номера. Вот список номеров, которые уже находятся в нашем аккаунте и доступны:

› nexmo number:list
14155550123

В вышеупомянутом примере у меня есть номер. Вы можете найти его по номеру аренды, если у вас нет номера. Код страны представлен двумя или тремя символами в шифре.

. На самом деле, все гораздо проще. Например, это достопримечательность Великобритании.

GB

Это для США, и это для Соединенных Штатов.

US

(прим. пер)

RU

). Давайте поищем помещение для аренды в США:

› nexmo number:search US
14155550111
14155550222
14155550333


Если у вас нет номера, вы должны его купить, после чего вы сможете отправлять и получать SMS в тех странах, которые требуют реального исходящего номера.

› nexmo number:buy 14155550111 --confirm
Number purchased: 14155550111

Настройка notifiable-модели

Добавьте метод routeNotificationForNutnetSms в свою Notifiable-модель, например:

Обновление моделей

Модели уже доступны и регулярно обновляются:

Отправка нотификаций

Мы достигли того момента, когда можем отправлять оповещения. Однако нам нечего объявлять! Откройте только что созданный файл (app/Notifyments/TiknetCreated.html), выполнив команду php Artisan make:notification TicketCommand.

” Начало сообщения в режиме via возвращает mail” – это первая функция, которую нужно изменить на странице 32. Измените “mail” на “nexmo”, потому что мы не хотим отправлять это по почте.

Наш новый класс владеет навыками форматирования сообщений электронной почты и SMS. Как можно решить эту проблему? Добавьте свежий подход:

public function toNexmo($notifiable){return (new NexmoMessage)->content($this->entry->content);}

Как объект NexmoMessage, так и $this-entry подчиняются этому методу. Эти строки можно добавить в наш файл:

Использовать иллюминаторизациямсенсагейсейсмессадж;AppticketEntry;

В этой ситуации измените метод __construct() на следующий:

Обеспеченный вход;

public function __construct(TicketEntry $entry){$this->entry = $entry;}

Теперь пользователь может получить созданное нами уведомление. Но пока мы не знаем точного получателя этого объявления.

Несколько пользователей могут подписаться на одно и то же приложение (билет), и каждый пользователь может подписаться на разные приложения. Мы должны обновить класс Ticket новым методом, чтобы сообщить об этом Laravel:

Отправка сообщений

Для отправки сообщений используется класс NutnetLaravelSmsSmsSender.
Пример отправки:

Как задать параметры сообщения по умолчанию в настройках провайдера? message_defaults is an operation.

Получение sms ответов

Что будет дальше, когда наши пользователи будут получать SMS с текстом приложения? Как они смогут ответить на запрос, если им придется открыть веб-сайт?

В настоящее время у нас нет функциональности, которая позволила бы пользователю ответить на запрос. Мы еще не решили, как упростить эту функциональность. Теперь SMS можно использовать для прямой отправки SMS.

Предварительные требования

Нам нужно

Nexmo установлен

Приём входящего sms


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

  1. Убедитесь, что приложение видно Nexmo через локальный туннель
  2. Создайте маршрут для получения SMS
  3. Отключите CSRF для маршрута, получающего SMS
  4. Сообщите Nexmo, какой маршрут должен вызывать webhook при получении сообщения.

Мы начнем с открытия туннеля, чтобы платформа Nexmo могла получить доступ к нашему приложению. Предположим, что у вас есть ngrok и ваш веб-сервер Laravel прослушивает порт 8000

Работа аутентификации laravel через sms

Вам стоит прочитать эту статью “Аутентификация пользователя в Laravel”.

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

// после проверки пользователя получаем его instance
Auth::login($user);// пользователь залогинен

Соответственно, после того, как пользователь авторизирован, вы можете спокойно пользоваться методами вроде Auth::user().
Собственно, по идее это самый простой вариант, чтобы пользоваться стандартными методами Laravel. Использовать ли make:auth или нет – решать вам. Какие-то вещи, которые он вам сгенерирует в любом случае пригодятся: тоже route для logout, к примеру.

Создайте собственный драйвер авторизации в качестве резервного плана. В этом разделе описаны варианты модификации драйвера и создания собственных вариантов авторизации.

Создание видов

Поле номера телефона и код страны должны быть добавлены в файл представления регистра.

Создание контроллеров

Почему требуются новые контроллеры аутентификации? Дополнительно, на самом деле. Больше нечего сказать!

Когда форма отправлена пользователем, вызывается метод RegisterController.

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

Теперь нам необходимо заменить метод входа в систему и обновить LoginController.

После проверки запроса мы пытаемся аутентифицировать пользователя, используя адрес электронной почты и пароль. Мы создаем новый токен для пользователя и отправляем ему код, если он уже существует.

О нет, как вы можете указать метод sendCode в модели Token?

Установка

Ваша среда разработки уже должна быть настроена, я полагаю. Мы советуем Homestead Improved для быстрого старта, если вы хотите начать работу.

Используйте Installer или Composer, чтобы начать новый проект Laravel.

laravel new demo

Или

composer create-project --prefer-dist laravel/laravel demo

Добавьте учетные данные вашей базы данных в файл.env после редактирования файла.

Заключение

Все, что вам нужно знать для отправки и получения SMS в приложении Laravel с использованием облачной коммуникационной платформы Nexmo, было рассмотрено в этом уроке.

Отправка sms, наконец-то!


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

fromenv(‘NEXMO_NUMBER’)

Как на примере ниже:

Route::get('/sms/send/{to}', function(NexmoClient $nexmo, $to){
    $message = $nexmo->message()->send([
        'to' => $to,
        'from' => env('NEXMO_NUMBER'),
        'text' => 'Sending SMS from Laravel. Woohoo!'
    ]);
    Log::info('sent message: ' . $message['message-id']);
});

Затем запустите сервер:

Вывод

Эта статья послужила кратким введением в интеграцию Twilio и приложения Laravel с двухфакторной аутентификацией. Предоставление пользователям возможности отключить двухфакторную аутентификацию и использовать звонки вместо SMS будет способствовать развитию этой демонстрации.

Когда вы в последний раз использовали 2FA для веб-сайта или приложения? С какими проблемами вы столкнулись? Удовлетворило ли это ваших пользователей?

Похожее:  Передать показания счетчика за свет Арзамас (ТНС энерго)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *