регистрация через смс
регистрация через смс
Доброго времени суток. Помогите новичку сделать регистрацию через смс.
1 - пользователь вводит номер телефон
2 - генерируется пароль и высылается на введенный номер
3 - проверяется пароль, если проверку проходит то заносим в базу
Так вот вопрос, как лучше и правильно будет организовать эти действия?
1 - пользователь вводит номер телефон
2 - генерируется пароль и высылается на введенный номер
3 - проверяется пароль, если проверку проходит то заносим в базу
Так вот вопрос, как лучше и правильно будет организовать эти действия?
Re: регистрация через смс
Так и организовывайте. в чем вопрос то?
Генерируйте код генератором.
Отсылайте смс отсылатором.
Генерируйте код генератором.
Отсылайте смс отсылатором.
Re: регистрация через смс
> 3 - проверяется пароль, если проверку проходит то заносим в базу
какой-то странный пункт - просто генерируем пароль, сразу сохраняем в базу и отправляем в смс, дальше если вошел значит телефон верный.
или вопрос все таки не про регистрацию, а про добавление номера телефона к существующему аккаунту?
какой-то странный пункт - просто генерируем пароль, сразу сохраняем в базу и отправляем в смс, дальше если вошел значит телефон верный.
или вопрос все таки не про регистрацию, а про добавление номера телефона к существующему аккаунту?
Re: регистрация через смс
Сделал так.
контроллер
модель
вид
Все выполняется, и данные заносятся в бд. А вот где и как нужно осуществить проверку - не соображу.
контроллер
Код: Выделить всё
public function actionReg()
{
$model = new RegForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()):
if ($user = $model->reg()):
if ($user->status === User::STATUS_ACTIVE):
if (Yii::$app->getUser()->login($user)):
return $this->goHome();
endif;
endif;
else:
Yii::$app->session->setFlash('error', 'Возникла ошибка при регистрации.');
Yii::error('Ошибка при регистрации');
return $this->refresh();
endif;
endif;
return $this->render(
'reg',
[
'model' => $model
]
);
}
Код: Выделить всё
public function reg()
{
$user = new User();
$user->username = $this->username;
$user->pnumber = $this->pnumber;
$user->status = $this->status;
$user->setPass;
$user->generateAuthKey();
return $user->save() ? $user : null;
}
Код: Выделить всё
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'pnumber') ?>
<div class="form-group">
<?= Html::submitButton('Войти', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
Re: регистрация через смс
> нужно осуществить проверку
проверку чего?
проверку чего?
Re: регистрация через смс
не правильно выразился, необходимо отправить сообщение с паролем, запросить этот пароль у пользователя и произвести его проверкуyan писал(а):> нужно осуществить проверку
проверку чего?
Re: регистрация через смс
Вы не можете свести регистрацию с "предпроверкой" к регистрации с последующим подтверждением(как с email)? Если нет, то вам нужно решить, как связывать данные(ключ) с незарегистрированным пользователем, чтобы потом проверить при отправке формы.
Re: регистрация через смс
> запросить этот пароль у пользователя и произвести его проверку
разве это не просто пароль для входа? зачем еще какой-то дополнительный пароль придумывать? а если этот просто пароль для входа то после отправки просто показываем форму входа
разве это не просто пароль для входа? зачем еще какой-то дополнительный пароль придумывать? а если этот просто пароль для входа то после отправки просто показываем форму входа
Re: регистрация через смс
Регистрация производится следующим путем.
Пользователь в форме вводит имя и номер телефона, по этим данным генерируется смс-пароль. Имя, номер телефона и смс-пароль вносятся в бд, а пользователю отправляется смс с смс-паролем. После ввода пароля сравнивается смс-пароль и введенный пароль, если все хорошо то идем на главную, если нет то обратно к вводу имени и номера телефона.
Я это пытаюсь реализовать так.
Есть две модели RegForm и ConfirmForm
Контроллер
Вопрос в том как соединить два действия reg и confirm???
Пользователь в форме вводит имя и номер телефона, по этим данным генерируется смс-пароль. Имя, номер телефона и смс-пароль вносятся в бд, а пользователю отправляется смс с смс-паролем. После ввода пароля сравнивается смс-пароль и введенный пароль, если все хорошо то идем на главную, если нет то обратно к вводу имени и номера телефона.
Я это пытаюсь реализовать так.
Есть две модели RegForm и ConfirmForm
Код: Выделить всё
<?php
namespace app\models;
use yii\base\Model;
use yii;
class RegForm extends Model{
public $username;
public $pnumber;
public $status;
public function rules(){
return[
[['username', 'pnumber'], 'filter', 'filter' => 'trim'],
[['username', 'pnumber'], 'required'],
[['username'], 'string', 'min' => 2, 'max' => 25],
['username', 'unique', 'targetClass' => User::className(),
'message' => 'Это имя уже занято.'],
['pnumber', 'unique', 'targetClass' => User::className(),
'message' => 'Этот номер уже занят.'],
['status', 'default', 'value' => User::STATUS_ACTIVE, 'on' => 'default'],
['status', 'in', 'range' =>[
User::STATUS_NOT_ACTIVE,
User::STATUS_ACTIVE
]]
];
}
public function attributeLabels()
{
return[
'username' => 'Имя пользователя',
'pnumber' => 'Номер телефона'
];
}
public function reg()
{
$user = new User();
$user->username = $this->username;
$user->pnumber = $this->pnumber;
$user->status = $this->status;
$user->setPass($this->pnumber);
$user->generateAuthKey();
return $user->save() ? $user : null;
}
}
?>
Код: Выделить всё
<?php
namespace app\models;
use yii\base\Model;
use yii;
class ConfirmForm extends Model{
public $pass;
public function rules(){
return[
[['pass'], 'required'],
['pass', 'validatePass']
];
}
public function validatePass($attribute)
{
if (!$this->hasErrors()):
if ($this->pass != '111'):
$this->addError($attribute, 'Неправильный пароль.');
endif;
endif;
}
public function attributeLabels()
{
return[
'pass' => 'Пароль',
];
}
public function confirm()
{
if ($this->validate()):
return true;
else:
return false;
endif;
}
}
?>
Код: Выделить всё
<?php
namespace app\controllers;
use Yii;
use app\models\RegForm;
use app\models\ConfirmForm;
use app\models\User;
use yii\bootstrap\Alert;
class MainController extends \yii\web\Controller
{
public $layout = 'basic';
public function actionIndex()
{
}
public function actionReg()
{
$model = new RegForm();
if ($model->load(Yii::$app->request->post()) && $model->validate()):
if ($user = $model->reg()):
if ($user->status === User::STATUS_ACTIVE):
if (Yii::$app->getUser()->login($user)):
endif;
endif;
else:
Yii::$app->session->setFlash('error', 'Возникла ошибка при регистрации.');
Yii::error('Ошибка при регистрации');
return $this->refresh();
endif;
endif;
return $this->render(
'reg',
[
'model' => $model
]
);
}
public function actionConfirm()
{
$model = new ConfirmForm();
if ($model->load(Yii::$app->request->post()) && $model->confirm()):
return $this->goHome();
endif;
return $this->render(
'confirm',
[
'model' => $model
]
);
}
public function actionSearch($search = null){
return $this->render(
'search',
['search' => $search]
);
}
}
- Vorx
- Сообщения: 14
- Зарегистрирован: 2010.05.08, 10:30
- Откуда: Санкт-Петербург
- Контактная информация:
Re: регистрация через смс
В контроллере в actionReg после регистрации пользователя, в случае если у пользователя STATUS_NOT_ACTIVE - делать redirect на confirm.
А в actionConfirm, если код неверный - redirect на 'reg'.
Либо на одной странице вывести обе формы.
RegForm отправлять ajax-ом и выводить сообщение об отправленной смс.
ConfirmForm тоже отправлять ajax-ом. Если код верный - redirect куда надо, если нет - выводим сообщение об ошибке.
А в actionConfirm, если код неверный - redirect на 'reg'.
Либо на одной странице вывести обе формы.
RegForm отправлять ajax-ом и выводить сообщение об отправленной смс.
ConfirmForm тоже отправлять ajax-ом. Если код верный - redirect куда надо, если нет - выводим сообщение об ошибке.
Re: регистрация через смс
Огромное спасибо, все работает!!!Vorx писал(а):В контроллере в actionReg после регистрации пользователя, в случае если у пользователя STATUS_NOT_ACTIVE - делать redirect на confirm.
А в actionConfirm, если код неверный - redirect на 'reg'.
Либо на одной странице вывести обе формы.
RegForm отправлять ajax-ом и выводить сообщение об отправленной смс.
ConfirmForm тоже отправлять ajax-ом. Если код верный - redirect куда надо, если нет - выводим сообщение об ошибке.
PS извиняюсь за нелогичность своих мыслей, просто только начал изучать Yii