Уведомление об успешной или неуспешной регистрации. В виде json с данными пользователя, если она успешная. и при регистрации хешировать пароль. - можете это объяснить?
Вопрос по api
Re: Вопрос по api
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Регистрация:
https://github.com/Dominus77/task/blob/ ... hp#L88-L99
Правила:
https://github.com/Dominus77/task/blob/ ... hp#L33-L44
Установка хэша пароля:
https://github.com/Dominus77/task/blob/ ... rm.php#L82
https://github.com/Dominus77/task/blob/ ... #L142-L145
Вывод только нужных полей:
https://github.com/Dominus77/task/blob/ ... hp#L34-L40
https://github.com/Dominus77/task/blob/ ... hp#L88-L99
Правила:
https://github.com/Dominus77/task/blob/ ... hp#L33-L44
Установка хэша пароля:
https://github.com/Dominus77/task/blob/ ... rm.php#L82
https://github.com/Dominus77/task/blob/ ... #L142-L145
Вывод только нужных полей:
https://github.com/Dominus77/task/blob/ ... hp#L34-L40
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
у меня пароль не хешируется....Dominus писал(а): ↑2018.10.04, 11:52 Регистрация:
https://github.com/Dominus77/task/blob/ ... hp#L88-L99
Правила:
https://github.com/Dominus77/task/blob/ ... hp#L33-L44
Установка хэша пароля:
https://github.com/Dominus77/task/blob/ ... rm.php#L82
https://github.com/Dominus77/task/blob/ ... #L142-L145
Вывод только нужных полей:
https://github.com/Dominus77/task/blob/ ... hp#L34-L40
Код: Выделить всё
public function actionCreate(){
$model = new UsersR();
if ($model->load(Yii::$app->request->bodyParams, '') && $model->validate()) {
if ($model->signup()) {
return ['status' => true, 'result' => 'Спасибо за регистрацию'];
}
}
return ['status' => false, 'result' => $model->getErrors()];
}
//модель
public function fields()
{
return ['name', 'four' => 'city'];
}
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'user';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['username', 'password', 'name', 'city', 'phone'], 'required'],
[['username', 'password', 'name', 'surname', 'city', 'phone', 'telegram', 'vk'], 'string', 'max' => 255],
[['username', 'phone'], 'unique', 'targetClass' => '\app\models\Users', 'message' => 'Вы уже зарегистрированы.'],
[['username'], 'email'],
[['phone_code',], 'string'],
[['phone_active'], 'integer'],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'username' => 'Email',
'password' => 'Пароль',
'name' => 'Имя ( Данная информация видна только Администратору сайта )',
'surname' => 'Фамилия ( Данная информация видна только Администратору сайта )',
'city' => 'Город',
'phone' => 'Телефон (на данный номер придет SMS подтверждение о регистрации)',
'telegram' => 'Telegram',
'vk' => 'Vk',
'phone_code' => 'Код сообщения',
];
}
public function signup()
{
if ($this->validate()) {
$user = $this->loadModel();
if ($user->save()) {
return $user;
}
}
return null;
}
/**
* @return User
* @throws \yii\base\Exception
*/
protected function loadModel()
{
$user = new User();
$user->username = $this->username;
$user->setPassword($this->password);
$user->generateAuthKey();
return $user;
}
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Что то вы тут всё в одно накопипастили)
Обратите внимание на структуру.
Когда регистрация проходит успешно, возвращается объект user
Обратите внимание на структуру.
Когда регистрация проходит успешно, возвращается объект user
Код: Выделить всё
public function signup()
{
if ($this->validate()) {
$user = $this->loadModel();
if ($user->save()) {
return $user;
}
}
return null;
}
Код: Выделить всё
protected function loadModel()
{
$user = new User();
$user->username = $this->username;
$user->setPassword($this->password); // Хэшируем пароль, метод setPassword($this->password) находится в модели User
$user->generateAuthKey();
return $user;
}
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
так а почему не хеширует? можете показать, где ошибка?Dominus писал(а): ↑2018.10.04, 16:50 Что то вы тут всё в одно накопипастили)
Обратите внимание на структуру.
Когда регистрация проходит успешно, возвращается объект userКод: Выделить всё
public function signup() { if ($this->validate()) { $user = $this->loadModel(); if ($user->save()) { return $user; } } return null; }
Код: Выделить всё
protected function loadModel() { $user = new User(); $user->username = $this->username; $user->setPassword($this->password); // Хэшируем пароль, метод setPassword($this->password) находится в модели User $user->generateAuthKey(); return $user; }
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Код: Выделить всё
protected function loadModel()
{
$user = new User();
$user->username = $this->username;
$user->password_hash = \Yii::$app->security->generatePasswordHash($this->password);// Хэшируем пароль
$user->auth_key = \Yii::$app->security->generateRandomString();
return $user;
};
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
Все равно не хеширует.Dominus писал(а): ↑2018.10.04, 17:16Код: Выделить всё
protected function loadModel() { $user = new User(); $user->username = $this->username; $user->password_hash = \Yii::$app->security->generatePasswordHash($this->password);// Хэшируем пароль $user->auth_key = \Yii::$app->security->generateRandomString(); return $user; };
Код: Выделить всё
public function signup()
{
if ($this->validate()) {
$user = $this->loadModel();
if ($user->save()) {
return $user;
}
}
return null;
}
/**
* @return User
* @throws \yii\base\Exception
*/
protected function loadModel()
{
$user = new User();
$user->username = $this->username;
$user->password = \Yii::$app->security->generatePasswordHash($this->password);// Хэшируем пароль
$user->auth_key = \Yii::$app->security->generateRandomString();
return $user;
}
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
У вас эта модель наследуется от User или отдельно как то?
https://github.com/Dominus77/task/blob/ ... er.php#L12
Код: Выделить всё
$user = new UserR();
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Вопрос по api
Модель UserR:Dominus писал(а): ↑2018.10.04, 17:34 У вас эта модель наследуется от User или отдельно как то?https://github.com/Dominus77/task/blob/ ... er.php#L12Код: Выделить всё
$user = new UserR();
Код: Выделить всё
<?php
namespace api\modules\v1\models;
use app\models\User;
use Yii;
class UsersR extends \app\models\User{
public function fields()
{
return ['name', 'city'];
}
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'user';
}
public function rules()
{
return [
[['username', 'password', 'name', 'city', 'phone'], 'required'],
[['username', 'password', 'name', 'surname', 'city', 'phone', 'telegram', 'vk'], 'string', 'max' => 255],
[['username', 'phone'], 'unique', 'targetClass' => '\app\models\Users', 'message' => 'Вы уже зарегистрированы.'],
[['username'], 'email'],
[['phone_code',], 'string'],
[['phone_active'], 'integer'],
];
}
public function signup()
{
if ($this->validate()) {
$user = $this->loadModel();
if ($user->save()) {
return $user;
}
}
return null;
}
/**
* @return User
* @throws \yii\base\Exception
*/
protected function loadModel()
{
$user = new User();
$user->username = $this->username;
$user->password = \Yii::$app->security->generatePasswordHash($this->password);// Хэшируем пароль
$user->auth_key = \Yii::$app->security->generateRandomString();
return $user;
}
}
Код: Выделить всё
class User extends ActiveRecord implements \yii\web\IdentityInterface
{
public static function tableName(){
return 'user';
}
public function rules()
{
return [
[['username', 'password'], 'required'],
//[['name', 'sername', 'phone', 'email', 'username', 'password'], 'string'],
];
}
/**
* @inheritdoc
*/
public static function findIdentity($id)
{
return static::findOne($id);
}
/**
* @inheritdoc
*/
public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne(['access_token' => $token]);
}
/**
* Finds user by username
*
* @param string $username
* @return static|null
*/
public static function findByUsername($username)
{
return static::findOne(['username' => $username]);
}
/**
* @inheritdoc
*/
public function getId()
{
return $this->id;
}
/**
* @inheritdoc
*/
public function getAuthKey()
{
return $this->auth_key;
}
/**
* @inheritdoc
*/
public function validateAuthKey($authKey)
{
return $this->auth_key === $authKey;
}
/**
* Validates password
*
* @param string $password password to validate
* @return bool if password provided is valid for current user
*/
public function validatePassword($password)
{
// return $this->password === $password;
return \Yii::$app->security->validatePassword($password, $this->password);
}
public function setPassword($password)
{
$this->password = \Yii::$app->security->generatePasswordHash($password);
}
public function generateAuthKey(){
$this->auth_key = \Yii::$app->security->generateRandomString();
}
public function create(){
return $this->save(false);
}
public static function findByPasswordResetToken($token)
{
if (!static::isPasswordResetTokenValid($token)) {
return null;
}
return static::findOne([
'password_reset_token' => $token,
//'status' => self::STATUS_ACTIVE,
]);
}
public static function isPasswordResetTokenValid($token)
{
if (empty($token)) {
return false;
}
$timestamp = (int) substr($token, strrpos($token, '_') + 1);
$expire = \Yii::$app->params['user.passwordResetTokenExpire'];
return $timestamp + $expire >= time();
}
public function removePasswordResetToken()
{
$this->password_reset_token = null;
}
public function generatePasswordResetToken()
{
$this->password_reset_token = \Yii::$app->security->generateRandomString() . '_' . time();
}
https://c2n.me/3X6anXT
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Проверяем, хэширует ли?
модель SignupForm
Контроллер:
Пробуем:
модель SignupForm
Код: Выделить всё
/**
* Signs users up.
*
* @return User|null the saved model or null if saving fails
* @throws \yii\base\Exception
*/
public function signup()
{
/*if ($this->validate()) {
$user = $this->loadModel();
if ($user->save()) {
return $user;
}
}
return null;*/
return $this->loadModel();
}
/**
* @return User
* @throws \yii\base\Exception
*/
protected function loadModel()
{
/*$user = new User();
$user->username = $this->username;
$user->setPassword($this->password);
$user->generateAuthKey();*/
return \Yii::$app->security->generatePasswordHash($this->password);// Хэшируем пароль
}
Код: Выделить всё
/**
* Регистрация
*
* POST /api/v1/users/signup
*
* body
* username=USERNAME
* password=PASSWORD
*
* @return array
* @throws \yii\base\Exception
*/
public function actionSignup()
{
$model = new SignupForm();
return [
'хэш' => $model->signup(),
];
/*if ($model->load(Yii::$app->request->bodyParams, '') && $model->validate()) {
if ($user = $model->signup()) {
return ['status' => true, 'result' => Yii::t('app', 'Thank you for registering. Your authorization key: {:key}', [
':key' => $user->auth_key,
])];
}
}
return ['status' => false, 'result' => $model->getErrors()];*/
}
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Вопрос по api
Вы на сайте обычным методом как регистрируетесь? Модель SignupForm есть? Используйте её и в api.
Модель User в api выглядит так:
https://github.com/Dominus77/task/blob/ ... s/User.php
Модель SignupForm в api выглядит так:
https://github.com/Dominus77/task/blob/ ... upForm.php
Действие регистрации в контроллере api выглядит так:
https://github.com/Dominus77/task/blob/ ... hp#L88-L99
Модель User в api выглядит так:
https://github.com/Dominus77/task/blob/ ... s/User.php
Модель SignupForm в api выглядит так:
https://github.com/Dominus77/task/blob/ ... upForm.php
Действие регистрации в контроллере api выглядит так:
https://github.com/Dominus77/task/blob/ ... hp#L88-L99
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!