Помогите пожалуйста новичку c Yii2-user

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

Не очень понял, что значит назначать по-умолчанию. Если вы имеете ввиду - назначать роли как описано в документации к yii2, то да, надо делать по документации.

P.S. В течение месяца постараюсь добавить в модуль управление ролями и их привязкой к пользователям
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Спасибо, буду следить
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Все отлично получается есть только один нюанс

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

public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            //if (!$this->module->confirmable && in_array($action->id, ['confirm', 'resend'])) {
            if (!\Yii::$app->getModule('user')->confirmable && in_array($action->id, ['confirm', 'resend'])) { //надо как-то избежать этого изменения
                throw new NotFoundHttpException('Disabled by administrator');
            }

            return true;
        } else {
            return false;
        }
    }
Когда переопределяю action он не хочет воспринимать из переопределяющего и берет из переопределяяемого.
И выдает ошибку не существование confirmable.

Так все хорошо, но очень не хочется делать это изменение в виджете
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

Не очень понимаю, в чем заключается ваша проблема. Приведите полностью код контроллера и опишите, что вы пытаетесь сделать.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

это контроллер виджета

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


<?php

/*
 * This file is part of the Dektrium project.
 *
 * (c) Dektrium project <http://github.com/dektrium/>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace dektrium\user\controllers;

use yii\web\Controller;
use yii\filters\AccessControl;
use yii\web\NotFoundHttpException;

/**
 * Controller that manages user registration process.
 *
 * @property \dektrium\user\Module $module
 *
 * @author Dmitry Erofeev <dmeroff@gmail.com>
 */
class RegistrationController extends Controller
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['register', 'connect'],
                        'roles' => ['?']
                    ],
                    [
                        'allow' => true,
                        'actions' => ['confirm', 'resend'],
                        'roles' => ['?', '@']
                    ],
                ]
            ],
        ];
    }

    /**
     * @inheritdoc
     */
    public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            if (!$this->module->confirmable && in_array($action->id, ['confirm', 'resend'])) {
                throw new NotFoundHttpException('Disabled by administrator');
            }

            return true;
        } else {
            return false;
        }
    }

    /**
     * Displays the registration page.
     *
     * @return string
     */
    public function actionRegister()
    {
        $model = $this->module->manager->createUser(['scenario' => 'register']);

        if ($model->load(\Yii::$app->getRequest()->post()) && $model->register()) {
            return $this->render('success', [
                'model' => $model
            ]);
        }

        return $this->render('register', [
            'model' => $model
        ]);
    }

    public function actionConnect($account_id)
    {
        $account = $this->module->manager->findAccountById($account_id);

        if ($account === null || $account->getIsConnected()) {
            throw new NotFoundHttpException('Something went wrong');
        }

        $this->module->confirmable = false;

        $model = $this->module->manager->createUser(['scenario' => 'connect']);
        if ($model->load($_POST) && $model->create()) {
            $account->user_id = $model->id;
            $account->save(false);
            \Yii::$app->user->login($model, $this->module->rememberFor);
            $this->goBack();
        }

        return $this->render('connect', [
            'model'   => $model,
            'account' => $account
        ]);
    }

    /**
     * Confirms user's account.
     *
     * @param $id
     * @param $token
     * @return string
     * @throws \yii\web\HttpException
     */
    public function actionConfirm($id, $token)
    {
        $user = $this->module->manager->findUserByIdAndConfirmationToken($id, $token);
        if ($user === null || !$user->confirm()) {
            return $this->render('invalidToken');
        }

        return $this->render('finish');
    }

    /**
     * Displays page where user can request new confirmation token.
     *
     * @return string
     */
    public function actionResend()
    {
        $model = $this->module->manager->createResendForm();

        if ($model->load(\Yii::$app->getRequest()->post()) && $model->validate()) {
            $model->getUser()->resend();

            return $this->render('success', [
                'model' => $model
            ]);
        }

        return $this->render('resend', [
            'model' => $model
        ]);
    }
}

 
я его переопределяю

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


<?php
namespace app\controllers;

use app\models\authorization\Signup;
use Yii;
use dektrium\user\controllers\RegistrationController as BaseRegistrationController;
use app\models\table\Country;
use app\models\table\TopUser;
use app\models\table\Destinations;

/**
 * Controller that manages user registration process.
 *
 */

class RegistrationController extends BaseRegistrationController
{

    public function actions()
    {
        $this->layout = 'login';
        return [
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
            ],
        ];
    }

    /**
     * @inheritdoc
     */
    public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            if (!\Yii::$app->getModule('user')->confirmable && in_array($action->id, ['confirm', 'resend'])) {
                throw new NotFoundHttpException('Disabled by administrator');
            }

            return true;
        } else {
            return false;
        }
    }

    /**
     * Displays the registration page.
     *
     * @return string
     */
    public function actionRegister()
    {

        $model = \Yii::$app->getModule('user')->manager->createUser(['scenario' => 'register']);
        if ($model->load(\Yii::$app->getRequest()->post())) && $model->register()) {
            return $this->render('success', [
                'model' => $model
            ]);
        }

        return $this->render('register', [
            'model' => $model,
            'country' => $arrayCountry,
            'user' => $arrayUser,
            'destinations' => $destinations
        ]);
    }

    /**
     * Displays page where user can request new confirmation token.
     *
     * @return string
     */
    public function actionResend()
    {
        $model = \Yii::$app->getModule('user')->manager->createResendForm();

        if ($model->load(\Yii::$app->getRequest()->post()) && $model->validate()) {
            $model->getUser()->resend();

            return $this->render('success', [
                'model' => $model
            ]);
        }

        return $this->render('resend', [
            'model' => $model
        ]);
    }

    /**
     * Confirms user's account.
     *
     * @param $id
     * @param $token
     * @return string
     * @throws \yii\web\HttpException
     */
    public function actionConfirm($id, $token)
    {
        $user = \Yii::$app->getModule('user')->manager->findUserByIdAndConfirmationToken($id, $token);
        if ($user === null || !$user->confirm()) {
            return $this->render('invalidToken');
        }

        return $this->render('finish');
    }

}

 
пытаюсь перебить action

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

/**
     * @inheritdoc
     */
    public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            //if (!$this->module->confirmable && in_array($action->id, ['confirm', 'resend'])) {
            if (!\Yii::$app->getModule('user')->confirmable && in_array($action->id, ['confirm', 'resend'])) {
                throw new NotFoundHttpException('Disabled by administrator');
            }

            return true;
        } else {
            return false;
        }
    }
 
но он его не принимает и берет из основного. Тогда приходится делать изменения в контроллере виджета

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

/**
     * @inheritdoc
     */
    public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            //if (!$this->module->confirmable && in_array($action->id, ['confirm', 'resend'])) {
            if (!\Yii::$app->getModule('user')->confirmable && in_array($action->id, ['confirm', 'resend'])) { //надо как-то избежать этого изменения
                throw new NotFoundHttpException('Disabled by administrator');
            }

            return true;
        } else {
            return false;
        }
    }
 
ошибка на то что такого свойства не существует (confirmable).
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение lynicidn »

яж написал в чем проблема он контроллер в конфиге прописывает у апп, а надо у модуля, вообще в контроллере надо проверку делать на этот счет
https://github.com/dektrium/yii2-user/pull/101
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

@lynicidn Да, похоже вы правы. Если бы контроллеры были сконфигурированы правильно, то module в контроллерах устанавливался бы в dektrium\user\Module.

@hrupin покажите еще раз конфиг. При правильном конфигурировании ваших ошибок быть не должно.
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

Все, я понял в чем ваша проблема. Вы обращаетесь к переопределенным контроллерам так: mysite/index.php?r=security/login, а нужно mysite/index.php?r=user/security/login.
То есть вы теряете имя модуля при обращении к ним.

Лучше даже, наверное, вынести эти контроллеры из неймпспейса app\controllers в, например, app\user, чтобы невозможно было обращаться к ним через index.php?r=security/login.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

мой config

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


<?php

$params = require(__DIR__ . '/params.php');

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '3LhzBk4mWrBMg5K9rUZsgtFPKhu7a9kJ',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
       'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],

        'db' => require(__DIR__ . '/db.php'),
    ],
    'modules' => [
        'user' => [
            'class' => 'dektrium\user\Module',
            'allowUnconfirmedLogin' => true,
            'confirmWithin' => 21600,
            'cost' => 12,
            'admins' => ['admin','Sashasj'],
            'components' => [
                'manager' => [
                    'userClass' => 'app\models\User',
                    'loginFormClass' => 'app\models\authorization\LoginForm',
                    'recoveryFormClass' => 'app\models\authorization\RecoveryForm',
                    'recoveryRequestFormClass' => 'app\models\authorization\RecoveryRequestForm',
                    'resendFormClass' => 'app\models\authorization\ResendForm',
                ],
            ],
            'controllerMap' => [
                'registration' => 'app\controllers\RegistrationController'
            ],
        ],
    ],
    'params' => $params,
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = 'yii\gii\Module';
}

return $config;


 
А как мне сделать так что бы обращаясь по адресу ?r=user/security/login получить ?r=security/login. Просто я там сделал необходимые изменения.
Или надо вносить изменения в yii2-user?
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

Не надо вносить никаких изменений кроме controllerMap. Когда вы добавляете в controllerMap строку 'registration' => 'app\controllers\RegistrationController', модуль начинает использовать ваш контроллер, поэтому вы должны обращаться к нему используя ?r=user/security/login
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

я так понимаю надо еще настроить views, а как настроить config/web.php? Помогите пожалуйста
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

У вас в конфиге все правильно настроено, просто обращайтесь к index.php?r=user/registration/register. Как переопределять представления написано в документации.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Он требует какой-то класс

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

The configuration for the "view" component must contain a "class" element. 
а какой класс надо указывать?
dmeroff
Сообщения: 101
Зарегистрирован: 2012.06.05, 14:32
Откуда: Петрозаводск
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение dmeroff »

yii\web\View
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Получилось, спасибо большое. Сам бы навряд ли разобрался бы.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Опять завис(((. Почему то не хочет брать layout

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

The view file does not exist: /home/sandro/www/cabinet.cluboninc.com/vendor/dektrium/yii2-user/views/layouts/login.php
настройки config/web.php

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


<?php

$params = require(__DIR__ . '/params.php');

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => '3LhzBk4mWrBMg5K9rUZsgtFPKhu7a9kJ',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],

        'db' => require(__DIR__ . '/db.php'),
    ],
    'modules' => [
        'user' => [
            'class' => 'dektrium\user\Module',
            'allowUnconfirmedLogin' => true,
            'confirmWithin' => 21600,
            'cost' => 12,
            'admins' => ['admin'],
            'components' => [


                'view' => [
                    'class' => 'yii\web\View',
                    'theme' => [
                        'pathMap' => [
                            '@dektrium/user/views' => '@app/views'
                        ],
                    ],
                ],


                'manager' => [
                    'userClass' => 'app\models\User',
                    'loginFormClass' => 'app\models\authorization\LoginForm',
                    'recoveryFormClass' => 'app\models\authorization\RecoveryForm',
                    'recoveryRequestFormClass' => 'app\models\authorization\RecoveryRequestForm',
                    'resendFormClass' => 'app\models\authorization\ResendForm',
                ],

            ],
            'controllerMap' => [
                'registration' => 'app\user\RegistrationController',
                'security' => 'app\user\SecurityController'
            ],
        ],
    ],
    'params' => $params,
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = 'yii\gii\Module';
}

return $config;

 
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

Все разобрался. Получается вид надо прописывать не модулю, а в основном components.
hrupin
Сообщения: 45
Зарегистрирован: 2014.06.30, 10:20

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение hrupin »

YII2 Самый лучший фреймворк)))
Аватара пользователя
mogilka
Сообщения: 21
Зарегистрирован: 2013.01.19, 12:43
Откуда: Казахстан, Алматы
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение mogilka »

Мне тоже помогите плиз разобраться, расширение установлено, миграция выполнена, но после регистрации не могу залогиниться

Автологин настроен

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

        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true
        ],
 
Модуль тоже

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

        'user' => [
            'class' => 'dektrium\user\Module',
            'admins' => ['admin'],
            "enableConfirmation"=>false,
            "enableUnconfirmedLogin"=>true
        ]
 
Пользователь зарегистрировался, в базе сохранился, но после действия sign in значение Yii::$app->user->identity пусто
Аватара пользователя
mogilka
Сообщения: 21
Зарегистрирован: 2013.01.19, 12:43
Откуда: Казахстан, Алматы
Контактная информация:

Re: Помогите пожалуйста новичку c Yii2-user

Сообщение mogilka »

Такая же беда с регистрацией по умолчанию, когда конфиг выглядит так:

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

 
        'user' => [
            'class' => 'dektrium\user\Module',
        ]
 
Письмо приходит, регистрация успешно подтверждается, при этом в меню даже написано Sign out (user), но при переходе на другую страницу в меню опять Sign In. И при попытке войти в этот акаунт опять открывается форма входа. Пробовала с разными юзерами, даже переустановила yii вместе с расширением. Не работает вход пользователя
Ответить