Вопрос в загаловке, есть форма:
<form method="post" action="/register" id="form_register">
{{ csrf_field() }}
<label for="login">
<p>Логин:</p>
<input type="text" name="login" placeholder="" required>
</label>
<label for="password">
<p>Пароль:</p>
<input type="password" name="password" placeholder="" required>
</label>
<label for="password-confirmation">
<p>Подтвердите пароль:</p>
<input type="password" name="password_confirmation" placeholder="" required>
</label>
<label for="phone">
<p>Номер телефона:</p>
<input id="send_sms" type="phone" name="phone" placeholder="8 999 999 99 99" maxlength ="11" required>
</label>
<input type="submit" name="regiser-sub" class="button" value="Зарегистрироваться">
@include('sessions.errors')
</form>
Контроллер
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
class RegistrationController extends Controller
{
public function create(){
return view("sessions.create-user");
}
public function store(Request $request){
$this->validate($request, [
'login' => 'required',
'password' => 'required|alpha_num|between:4,12|confirmed',
'password_confirmation' => 'required|alpha_num|between:4,12',
'phone' => 'required|digits:11',
]);
$user = User::create(request(['login', 'password', 'phone']));
auth()->login($user);
return redirect()->home();
}
public function destroy(Request $request){
auth()->logout();
return redirect()->home();
}
}
Есть смс-шлюз который отправляет смс таким запросом https://g.s.ru/v2/sms/send?number=7999999999&text=F:+6844&sign=SMS Собственно вопрос - нужно при заполнении поля "номер телефона" сделать аякс запрос на отдельный метод контроллера который будет получать номер введенный и формировать рандомный код, затем курлом отправлять этот код по смс и если код совпадает регистрировать пользователя? Ни разу такое не реализовавал, поэтому не знаю принцип, буду благодарен за подсказку как правильно сделать.
Общая идея:
создать случайный код
сохранить в сессию
выслать через смс
при сохранении формы, обязательно, проверить введеный код с кодом который в сессии
Создаешь обработчик в api.php. и контроллер, который будет отправлять через шлюз событие.
POST /api/register/send-sms
{
'phone': 799999999
}
В форме для поля phone
на подписываешься на событие blur
получаешь содержимое поля ajax
запросом на на адрес /api/register/send-sms
.
В контроллере генерируешь случайное число 23123
.
Сохраняешь в session()->put('phone', '23123') - понадобится для валидации.
Отправляешь через sms шлюз.
Но, в указанной выше форме нет поля ввода кода подтверждения и я бы добавил его в форму.
$this->validate($request, [
'login' => 'required',
'password' => 'required|alpha_num|between:4,12|confirmed',
'password_confirmation' => 'required|alpha_num|between:4,12',
'phone' => 'required|digits:11',
'code_confirmation' => 'required|digits:5',
]);
Пользователь отправляет форму с кодом подтверждения. Валидация проверит что поля заполнены, но не проверит верность code_confirmation
и здесь 2 пути:
В контроллере:
$code = session()->get($request->get('phone'));
if($code !== $request->get('code_confirmation')){
// отправляешь код ошибки
}
Или в ReqestForm
, но сути это не изменит. Подробнее можно найти в документации.
Я бы перенес все в ReqestForm
для чистоты кода.
Есть один класс и две функции внутри негоВо второй функции нужно значение переменной, которая получается из функции №1
У меня есть некий кошелек, в котором пока что есть только монетки и ключи для сундуковНа данный момент player выглядит вот так:
Собственно вопрос в тайтлеЧто я хочу: единый формат ответов от API как у VK