Вступление
В предыдущем эпизоде я писал о подготовке вашего приложения для SMS с использованием широко используемого сервиса текстовых сообщений Twilio. В сегодняшнем уроке я покажу вам, как проверять телефонные номера пользователей перед передачей большого объема текстов и повышением ваших расходов.
Прежде чем мы начнем, я хочу призвать вас оставлять вопросы и отзывы в комментариях. Если вы хотите следить за моими будущими учебниками Envato Tuts + и другими сериями, пожалуйста, посетите мою страницу инструктора или следуйте @lookahead_io .
Изложение процесса
После того, как пользователь предоставит свой номер телефона, мы хотим выполнить несколько простых шагов:
- Генерация уникального четырехзначного кода.
- Сохраните их номер ячейки и четырехзначный код в нашей базе данных ( или зашифруйте код локально как скрытую переменную формы на странице ).
- Отправьте текст на непроверенный номер с четырехзначным кодом.
- Отобразите форму с просьбой предоставить полученный код.
- Убедитесь, что коды совпадают.
- Укажите номер, который подтвержден в базе данных.
Страница контактов пользователя
В Планировщике собраний каждый пользователь может добавить несколько методов контакта, например, Skype, телефон и т. Д. Каждый номер ячейки должен быть проверен для использования в SMS-уведомлениях.
Третья строка ниже показывает флажок, который они могут щелкнуть, чтобы запросить подтверждение:
Нажатие на которое переводит пользователя в actionVerify()
ниже; обратите внимание, что сначала они переносятся в блок else
потому что они еще не отправили код:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
public function actionVerify($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post())) {
…
} else {
$canRequest = $model->canRequest();
if ($canRequest) {
// send a text to this number
$model->requestCode();
return $this->render(‘verify’, [
‘model’ => $model,
]);
} else {
Yii::$app->getSession()->setFlash(‘error’, $canRequest);
return $this->redirect([‘/user-contact’]);
}
}
}
|
Метод canRequest()
проверяет, запрашивали ли они коды повторно или слишком часто:
01
02
03
04
05
06
07
08
09
10
11
|
public function canRequest() {
if ($this->request_count<UserContact::MAX_REQUEST_COUNT) {
if (time() — $this->requested_at>=60) {
return true;
} else {
return Yii::t(‘frontend’,’Sorry, you must wait a minute between requests.’);
}
} else {
return Yii::t(‘frontend’,’You have exceeded the maximum number of attempts.’);
}
}
|
Я заставляю их ждать минуту между попытками уменьшить злоупотребления.
Передача кода подтверждения
Если разрешено, он вызывает requestCode()
:
1
2
3
4
5
6
7
8
9
|
public function requestCode() {
$this->verify_code = rand(0,9999);
$this->requested_at = time();
$this->request_count+=1;
$this->update();
$sms = new Sms;
$sms->transmit($this->info,Yii::t(‘frontend’,
‘Please return to the site and type in {code}’,[‘code’=>sprintf(«%04d»,$this->verify_code)]));
}
|
Это делает следующее:
- Создает случайный четырехзначный код.
- Он записывает последний момент времени (в секундах Unix), когда был сделан запрос на проверку.
- Увеличивает количество попыток проверки этого номера.
- И все это хранится в базе данных.
- Затем он передает текст с кодом, похожим на изображение ниже.
После запроса кода, сохранения его в базе данных за кулисами и передачи кода пользователю, он загружает следующую форму с запросом кода:
Проверка кода
Когда пользователь пытается отправить код, он запускает верхнюю часть actionVerify()
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
public function actionVerify($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post())) {
// display verification form
$model->verify = Yii::$app->request->post()[‘UserContact’][‘verify’];
if (strval($model->verify_code) == strval($model->verify)) {
$model->status = UserContact::STATUS_VERIFIED;
$model->update();
Yii::$app->getSession()->setFlash(‘success’,Yii::t(‘frontend’,’Thank you, your number is confirmed.’));
return $this->redirect([‘/user-contact’]);
} else {
Yii::$app->getSession()->setFlash(‘error’, Yii::t(‘frontend’,’Sorry, that is incorrect. Please request a new code.’));
return $this->redirect([‘/user-contact’]);
}
} else {
…
}
}
|
Проверяет, совпадают ли коды. Если они это сделают, он обновляет базу данных, чтобы отразить число было проверено. И это говорит пользователю:
Если нет, отображается сообщение об ошибке:
Попробуй сам
Если вы хотите увидеть это в действии, вы можете зарегистрироваться в Simple Planner или Meeting Planner (что легко с социальной учетной записью, такой как Facebook или Google) и добавить номер телефона . Затем нажмите на галочку в списке, который вы увидите. Вот и все.
Завершение
Очевидно, что если ваше приложение отправляет много текстовых сообщений, это ощутимая стоимость бизнеса, и вы хотите ограничить злоупотребления. Это начинается с настройки брандмауэра против недопустимых номеров или действительных номеров, которые фактически не принадлежат самозванцу.
Я надеюсь, что вы нашли это полезным. Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте их в комментариях. Если вы хотите следить за моими будущими учебниками Envato Tuts + и другими сериями, пожалуйста, посетите мою страницу инструктора или следуйте @lookahead_io . Обязательно посмотрите мою серию стартапов и Планировщик собраний .