Yii2-user

Выкладываем свои наработки
faeton
Сообщения: 88
Зарегистрирован: 2011.06.06, 01:00

Re: Yii2-user

Сообщение faeton »

Замечательный модуль!

При регистрации через соц.сеть какой пароль задается пользователю?
Изображение
Tivos
Сообщения: 41
Зарегистрирован: 2015.08.12, 12:34

Re: Yii2-user

Сообщение Tivos »

Всем привет.
Добавил поле в форму регистрации, а оно не сохраняется в БД.
Подскажите, пожалуйста в чем ошибка?
мой код, все делал по инструкции:

Код: Выделить всё

'user' => [
    'class' => 'dektrium\user\Module',
    'modelMap' => [
        'RegisterForm' => 'app\models\RegisterForm',
    ],
],

Код: Выделить всё

'components' => [
    'view' => [
        'theme' => [
            'pathMap' => [
                '@dektrium/user/views' => '@app/views/user'
            ],
        ],
    ],
],
Добавил в БД новое поле 'field'.
Создал в моделях файл "RegisterForm.php"

Код: Выделить всё

<?php

namespace app\models;

use dektrium\user\models\RegistrationForm as BaseRegistrationForm;

class RegistrationForm extends BaseRegistrationForm
{
    /**
     * @var string
     */
    public $field;
    /**
     * @inheritdoc
     */

    public function rules()
    {
        $rules = parent::rules();
        $rules['fieldRequired'] = ['field', 'required'];
        $rules['fieldLength']   = ['field', 'string', 'max' => 10];
        return $rules;
    }
    
}
Так же создал представление "register.php"

Код: Выделить всё

<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;

/**
 * @var yii\web\View              $this
 * @var yii\widgets\ActiveForm    $form
 * @var dektrium\user\models\User $user
 */

$this->title = Yii::t('user', 'Sign up');
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="row">
    <div class="col-md-4 col-md-offset-4">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title"><?= Html::encode($this->title) ?></h3>
            </div>
            <div class="panel-body">
                <?php $form = ActiveForm::begin([
                    'id' => 'registration-form',
                ]); ?>

                <?= $form->field($model, 'field') ?>

                <?= $form->field($model, 'email') ?>

                <?= $form->field($model, 'username') ?>

                <?= $form->field($model, 'password')->passwordInput() ?>

                <?= Html::submitButton(Yii::t('user', 'Sign up'), ['class' => 'btn btn-success btn-block']) ?>

                <?php ActiveForm::end(); ?>
            </div>
        </div>
        <p class="text-center">
            <?= Html::a(Yii::t('user', 'Already registered? Sign in!'), ['/user/security/login']) ?>
        </p>
    </div>
</div>
Сам модуль работает, отображается новое поле, но введенные данные в это поле не сохраняются(
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Yii2-user

Сообщение ElisDN »

Tivos писал(а):Всем привет. Добавил поле в форму регистрации, а оно не сохраняется в БД.
Базовый класс RegistrationForm в методе регистрации все поля в $user присваявает. Там тоже добавьте.
Аватара пользователя
vitaxa_prog
Сообщения: 306
Зарегистрирован: 2011.06.06, 22:44
Откуда: Волноваха

Re: Yii2-user

Сообщение vitaxa_prog »

ElisDN писал(а):
Tivos писал(а):Всем привет. Добавил поле в форму регистрации, а оно не сохраняется в БД.
Базовый класс RegistrationForm в методе регистрации все поля в $user присваявает. Там тоже добавьте.
Наверное не в базовый класс добавить, а в своем классе RegistrationForm переопределить метод register().
В принципе ничего нет невозможного.
— Вы думаете?
— Для человека. С интеллектом.
Аватара пользователя
vitaxa_prog
Сообщения: 306
Зарегистрирован: 2011.06.06, 22:44
Откуда: Волноваха

Re: Yii2-user

Сообщение vitaxa_prog »

vitaxa_prog писал(а): При попытке войти выдает ошибку 404. Если закомментировать строчку

Код: Выделить всё

'as backend' => 'dektrium\user\filters\BackendFilter',

То ошибка не появляется. Посмотрел код фильтра. Там просто проверка есть ли контроллер в массиве указанных.
Подскажите пожалуйста как решить эту проблему?
Отвечаю сам же на свой вопрос.
Плохо смотрел код фильтра!
Я так и не понял какую роль выполняет этот фильтр. Почему если текущий контроллер попадает в массив предопределенных контроллеров, то возвращаем 404 ошибку? Я не стал ломать голову над тем, что задумывал автор. Просто взял и написал свой фильтр с нужной мне логикой.
Все работает. Спасибо автору за модуль. За два дня копания в нем, пришло понимание, что это весьма неплохой фундамент для расширения.
В принципе ничего нет невозможного.
— Вы думаете?
— Для человека. С интеллектом.
faeton
Сообщения: 88
Зарегистрирован: 2011.06.06, 01:00

Re: Yii2-user

Сообщение faeton »

Я тоже попал на эту ошибку
Изображение
Tivos
Сообщения: 41
Зарегистрирован: 2015.08.12, 12:34

Re: Yii2-user

Сообщение Tivos »

у этого модуля есть функция генерации пароля

Код: Выделить всё

'enableGeneratingPassword' => true, 
А как быть если на сайте есть две формы: в одной нужно ручками вносить пароль, а в другой нужно генерировать пароль?
Аватара пользователя
des1roer
Сообщения: 391
Зарегистрирован: 2015.02.06, 17:03
Контактная информация:

Re: Yii2-user

Сообщение des1roer »

как отключить подтвеждение мыла?
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Yii2-user

Сообщение ElisDN »

Код: Выделить всё

'enableConfirmation' => false, 
Arroyo
Сообщения: 105
Зарегистрирован: 2014.11.29, 11:24

Re: Yii2-user

Сообщение Arroyo »

Установил Yii2-user и Yii2-RBAC. Как сделать чтобы роль присваивалась при регистрации автоматически?
andrei.obuhovski
Сообщения: 610
Зарегистрирован: 2015.07.16, 10:50

Re: Yii2-user

Сообщение andrei.obuhovski »

Arroyo писал(а):Установил Yii2-user и Yii2-RBAC. Как сделать чтобы роль присваивалась при регистрации автоматически?
попробуйте:

Код: Выделить всё

            $role = Yii::$app->authManager->getRole('RoleName');
            Yii::$app->authManager->assign($role, $user->getId());
kutuev93
Сообщения: 75
Зарегистрирован: 2016.01.24, 18:15
Откуда: Тюмень

Re: Yii2-user

Сообщение kutuev93 »

Подскажите, при выходе из системы получаю ошибку:

Method Not Allowed (#405)
Method Not Allowed. This url can only handle the following request methods: POST.

Подозреваю, что надо $depends как то измениить. Юзаю такой код:

echo Menu::widget([
'items' => [
Yii::$app->user->isGuest ?
['label' => 'Sign in', 'url' => ['/user/security/login']] :
['label' => 'Sign out (' . Yii::$app->user->identity->username . ')',
'url' => ['/user/security/logout'],
'linkOptions' => ['data-method' => 'post']

],
['label' => 'Register', 'url' => ['/user/registration/register'], 'visible' => Yii::$app->user->isGuest]
],
]);

Заранее спасибо
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Yii2-user

Сообщение ElisDN »

Очистите web/assets и обновите страницу.
kutuev93
Сообщения: 75
Зарегистрирован: 2016.01.24, 18:15
Откуда: Тюмень

Re: Yii2-user

Сообщение kutuev93 »

ElisDN писал(а):Очистите web/assets и обновите страницу.
Папку очистил перезапустил - та же проблема :|
Сверху имеется:

<?php
use yii\helpers\Html;
use yii\widgets\Menu;
use app\assets\AppAsset;
AppAsset::register($this);
?>

Это массив depends в appasset:

public $depends = [
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapAsset',
];
kutuev93
Сообщения: 75
Зарегистрирован: 2016.01.24, 18:15
Откуда: Тюмень

Re: Yii2-user

Сообщение kutuev93 »

ElisDN писал(а):Очистите web/assets и обновите страницу.
Странно, но такая ссылка заработала:

<a href="<?= Url::to(['/user/security/logout'])?>" data-method="post">Выход</a>

Я так понимаю, вы супергуру в yii, если не сложно, не могли бы вы прокомментировать, почему так работает, по другому нет?

Заранее спасибо! ;)
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Yii2-user

Сообщение ElisDN »

kutuev93 писал(а):Я так понимаю, вы супергуру в yii, если не сложно, не могли бы вы прокомментировать, почему так работает, по другому нет?
Используйте yii\bootstrap\Nav вместо yii\widgets\Menu, так как у Menu нет опции linkOptions.
kutuev93
Сообщения: 75
Зарегистрирован: 2016.01.24, 18:15
Откуда: Тюмень

Re: Yii2-user

Сообщение kutuev93 »

ElisDN писал(а):
kutuev93 писал(а):Я так понимаю, вы супергуру в yii, если не сложно, не могли бы вы прокомментировать, почему так работает, по другому нет?
Используйте yii\bootstrap\Nav вместо yii\widgets\Menu, так как у Menu нет опции linkOptions.
Здравствуйте, возник еще один вопрос на основе данного модуля.
Мне хотелось бы сделать авторизацию через всплывающее окно. Сейчас авторизация реализуется через экшен login.
Ничего пока умного не пришло в голову как:

1. В модальном окне тупо выдрать див, с полной формой
2. Перед этим создать модель $model = Yii::createObject(LoginForm::className());

Работает, но идея очень некрасивая, потому что я думаю:

1. Я уже завязал логику в вид
2. Возможно, будет уязвимое место на сайте

Потенциальное решение для себя:

Нужно как то получать экземпляр модели не здесь, но тогда где, моя кнопка с авторизацией находится в хеадере шаблона, соответственно доступна из любого контроллера сайта


Спасибо
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Yii2-user

Сообщение Onotole »

kutuev93 писал(а):
ElisDN писал(а):
kutuev93 писал(а):Я так понимаю, вы супергуру в yii, если не сложно, не могли бы вы прокомментировать, почему так работает, по другому нет?
Используйте yii\bootstrap\Nav вместо yii\widgets\Menu, так как у Menu нет опции linkOptions.
Здравствуйте, возник еще один вопрос на основе данного модуля.
Мне хотелось бы сделать авторизацию через всплывающее окно. Сейчас авторизация реализуется через экшен login.
Ничего пока умного не пришло в голову как:

1. В модальном окне тупо выдрать див, с полной формой
2. Перед этим создать модель $model = Yii::createObject(LoginForm::className());

Работает, но идея очень некрасивая, потому что я думаю:

1. Я уже завязал логику в вид
2. Возможно, будет уязвимое место на сайте

Потенциальное решение для себя:

Нужно как то получать экземпляр модели не здесь, но тогда где, моя кнопка с авторизацией находится в хеадере шаблона, соответственно доступна из любого контроллера сайта


Спасибо
Создать виджет авторизации, как вариант, и там, где формируется меню, или кнопка, нажатие на которую должно вызывать модальное окно, подключать этот виджет
kutuev93
Сообщения: 75
Зарегистрирован: 2016.01.24, 18:15
Откуда: Тюмень

Re: Yii2-user

Сообщение kutuev93 »

Onotole писал(а):
kutuev93 писал(а):
ElisDN писал(а): Используйте yii\bootstrap\Nav вместо yii\widgets\Menu, так как у Menu нет опции linkOptions.
Здравствуйте, возник еще один вопрос на основе данного модуля.
Мне хотелось бы сделать авторизацию через всплывающее окно. Сейчас авторизация реализуется через экшен login.
Ничего пока умного не пришло в голову как:

1. В модальном окне тупо выдрать див, с полной формой
2. Перед этим создать модель $model = Yii::createObject(LoginForm::className());

Работает, но идея очень некрасивая, потому что я думаю:

1. Я уже завязал логику в вид
2. Возможно, будет уязвимое место на сайте

Потенциальное решение для себя:

Нужно как то получать экземпляр модели не здесь, но тогда где, моя кнопка с авторизацией находится в хеадере шаблона, соответственно доступна из любого контроллера сайта


Спасибо
Создать виджет авторизации, как вариант, и там, где формируется меню, или кнопка, нажатие на которую должно вызывать модальное окно, подключать этот виджет
Я правильно понимаю, что в виджите будет как раз браться экземпляр модели: $model = Yii::createObject(LoginForm::className());
Далее мне нужно будет вынести форму авторизации отдельно, а в методе run() как раз отрисовывать кусок формы, все верно?
Аватара пользователя
vitaxa_prog
Сообщения: 306
Зарегистрирован: 2011.06.06, 22:44
Откуда: Волноваха

Re: Yii2-user

Сообщение vitaxa_prog »

kutuev93 писал(а): Мне хотелось бы сделать авторизацию через всплывающее окно. Сейчас авторизация реализуется через экшен login.
Ничего пока умного не пришло в голову как:
В документации написано, что можно всё переопределять. Я бы посоветовал вам унаследовать нужные части от yii-user. Я у себя в проекте так и сделал. И все прекрасно работает.
В принципе ничего нет невозможного.
— Вы думаете?
— Для человека. С интеллектом.
Ответить