<?php $this->widget('application.components.UloginWidget', array(
'params'=>array(
'redirect'=>'http://'.$_SERVER['HTTP_HOST'].'/index.php?r=ulogin/login' //Адрес, на который ulogin будет редиректить браузер клиента. Он должен соответствовать контроллеру ulogin и действию login
)
)); ?>
'allowedIPs' => ['*'],
Может, ещё в том проблема, что нет формы регистрации здесь? Во fronted есть только:<?php
use \kartik\datecontrol\Module;
$params = array_merge(
require(__DIR__ . '/../../common/config/params.php'),
require(__DIR__ . '/../../common/config/params-local.php'),
require(__DIR__ . '/params.php'),
require(__DIR__ . '/params-local.php')
);
return [
'id' => 'app-backend',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'backend\controllers',
'bootstrap' => ['log','gii','debug'],
'language' => 'ru',
'modules'=>[
'gii'=>[
'class'=>'yii2\gii\Module',
'generators' => [ //here
'crud' => [ // generator name
'class' => 'yii\gii\generators\crud\Generator', // generator class
'templates' => [ //setting for out templates
'myGii' => '@common/generators/crud/default', // template name => path to template
]
]
],
],
'debug'=>[
'class'=>'yii2\debug\Module'
],
'blog' => [
'class' => 'medeyacom\blog\Blog',
],
'datecontrol'=> [
'class'=> 'kartik\datecontrol\Module',
// format settings for displaying each date attribute (ICU format example)
'displaySettings' => [
Module::FORMAT_DATE => 'php:d-M-Y',
/*'dd-MM-yyyy',*/
Module::FORMAT_TIME => 'php: H:1',
/*'hh:mm:ss a',*/
Module::FORMAT_DATETIME => 'php:d-m-Y H:1',
/*'dd-MM-yyyy hh:mm:ss a',*/
],
// format settings for saving each date attribute (PHP format example)
'saveSettings' => [
Module::FORMAT_DATE => 'yyyy-M-dd',
/*'php:U', // saves as unix timestamp*/
Module::FORMAT_TIME => 'H:i:s',
/*'php:H:i:s',*/
Module::FORMAT_DATETIME => 'yyyy-M-dd H:i:s',
/*'php:Y-m-d H:i:s',*/
],
'displayTimezone'=>'UTC',
'saveTimezone' => 'UTC',
'autoWidget' =>true,
]
],
'components' => [
/*'user' =>[
'identityClass' =>'common\models\User',
'enableAutoLogin' => true,
],
'view' => [
'theme' => [
'pathMap' => [
'@app/views' => '@vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app'
],
],
],*/
'request' => [
'csrfParam' => '_csrf-backend',
],
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
],
'session' => [
// this is the name of the session cookie used for login on the backend
'name' => 'advanced-backend',
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
'formatter'=> [
'class' =>'yii\i18n\Formatter',
/* 'defaultTimeZone' => 'Europe/Samara',*/
/* 'timeZone' => 'GMT+5',*/
'decimalSeparator' => ',',
'thousandSeparator' => ' ',
'currencyCode' => 'EUR',
/* 'dateFormat' => 'd MMMM yyyy',*/
'dateFormat' => 'php:d-M-Y',
'datetimeFormat' => 'php: d-M-Y H:i:',
/*'datetimeFormat'=>'d-M-Y H:i:s',*/
/* 'timeFormat' => 'H:i:s', */
],
],
'params' => $params,
'on beforeAction' => function($event){ //цепляемся за событие перед запуском экшена
Yii::$app->controller->attachBehavior('',[ //цепляем к текущему контролеру поведение
'class' => \yii\filters\AccessControl::className(), //указываем класс поведения
'except' => ['login','error','register'],
//исключим из правила экшены login и error, так как они должны быть доступны всем
'rules' => [
[
'allow' => true, //разрешаем доступ
'roles' => ['@'], //'@' только зарегистрированным пользователям или замените на 'admin', что бы только админам позволить
],
],
]);
},
];
'bootstrap' => ['log', 'debag'],
, то ошибка: 'Unknown bootstrapping component ID: debag' а если 'bootstrap' => ['log', 'gii','debag'],
'Unknown bootstrapping component ID: gii' Зарегистрированным пользователям нечего там делать, зачем давать доступ?
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions'=> ['index'],
'allow' => true,
'roles' => ['canAdmin'],
/* 'roles' => ['?'],*/
],
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout','save-redactor-img','save-img'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
/**
class SiteController extends Controller
{
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions'=> ['index'],
'allow' => true,
'roles' => ['canAdmin'],
/* 'roles' => ['?'],*/
],
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout','save-redactor-img','save-img'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
/**
* @inheritdoc
*/
'params' => $params,
'on beforeAction' => function($event){ //цепляемся за событие перед запуском экшена
Yii::$app->controller->attachBehavior('',[ //цепляем к текущему контролеру поведение
'class' => \yii\filters\AccessControl::className(), //указываем класс поведения
'except' => ['login','error','register'],
//исключим из правила экшены login и error, так как они должны быть доступны всем
'rules' => [
[
'allow' => true, //разрешаем доступ
'roles' => ['@'], //'@' только зарегистрированным пользователям или замените на 'admin', что бы только админам позволить
],
],
]);
},
<?php
return [
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'timeZone' => 'Europe/Moscow',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
/* 'robotEmail' => '',*/
/*'robotName' => 'Robot'*/
],
'image' => [
'class' => 'yii\image\ImageDriver',
'driver' => 'GD', //GD or Imagick
],
'authManager' => [
'class' => 'yii\rbac\DbManager',
'cache' => 'cache'
],
],
'on beforeAction' => function($event){ //цепляемся за событие перед запуском экшена
Yii::$app->controller->attachBehavior('',[ //цепляем к текущему контролеру поведение
'class' => \yii\filters\AccessControl::className(), //указываем класс поведения
'except' => ['login','error','register'],
//исключим из правила экшены login и error, так как они должны быть доступны всем
'rules' => [
[
'allow' => true, //разрешаем доступ
'roles' => ['@'], //'@' только зарегистрированным пользователям или замените на 'admin', что бы только админам позволить
],
],
]);
},
];
<?php
namespace common\models;
use yii\base\Model;
use common\models\User;
/**
* Signup form
*/
class SignupForm extends Model
{
public $username;
public $email;
public $password;
/**
* @inheritdoc
*/
/* public function rules()
{
return array(
array('email', 'password', 'required', 'message'=>'Поле обязательно для заполнения'),
array('email', 'email', 'message'=>'Неверный формат Email'),
array('password', 'compare', 'compareAttribute'=> 'message'=>'Пароли не совпадают'),
);
}*/
public function rules()
{
return [
['username', 'trim'],
['username', 'required'],
['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'],
['username', 'string', 'min' => 2, 'max' => 255],
['email', 'trim'],
['email', 'required'],
['email', 'email'],
['email', 'string', 'max' => 255],
['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'],
['password', 'required'],
['password', 'string', 'min' => 6],
];
}
/**
* Signs user up.
*
* @return User|null the saved model or null if saving fails
*/
public function attributeLabels () {
return [
'username' => 'Логин',
'password' => 'Пароль',
'email' => 'email',
];
}
public function register()
{
if(!$this->hasError())
{
//Добавляем в бд
$model = new User;
$model->user_email = $this->email;
$model->user_password = CPasswordHelper::hashPassword($this->password);
$model->save();
}
else
return false;
}
}
/* public function register()
{
if (!$this->validate()) {
return null;
}
$user = new User();
$user->username = $this->username;
$user->email = $this->email;
$user->setPassword($this->password);
$user->generateAuthKey();
return $user->save() ? $user : null;
}
}*/
<?php
namespace backend\controllers;
use Yii;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;
use yii\base\DynamicModel;
use vova07\imperavi\Widget;
use yii\base\Action;
use yii\base\InvalidCallException;
use yii\base\InvalidConfigException;
use yii\helpers\FileHelper;
use yii\web\BadRequestHttpException;
use yii\web\Response;
use yii\web\UploadedFile;
use yii\helpers\Url;
use yii\widgets\ActiveForm;
use kartik\widgets\FileInput;
use common\models\Person;
use common\models\ImageManager;
/**
* Site controller
*/
class SiteController extends Controller
{
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions'=> ['index'],
'allow' => true,
'roles' => ['canAdmin'],
],
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout','save-redactor-img','save-img'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
/**
* @inheritdoc
*/
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
/**
* Displays homepage.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Login action.
*
* @return string
*/
public function actionLogin()
{
if (!Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
} else {
return $this->render('login', [
'model' => $model,
]);
}
}
/**
* Logout action.
*
* @return string
*/
public function actionLogout()
{
Yii::$app->user->logout();
return $this->goHome();
}
public function actionRegister()
{
$model = new RegisterForm;
if(!empty($_POST['RegisterForm']))
{
$model->attributes = $_POST['RegisterForm'];
if($model->validate() && $model->register())
$this->redirect($this->createUrl('site/index'));
}
$this->render('register', array('model'=>$model));
}
/*public function actionRegister() {
$model = new RegisterForm;
if(isset($_POST['RegisterForm']))
{
$model->attributes=$_POST['RegisterForm'];
if($model->validate()){
$this->redirect(Yii::app()->user->returnUrl);
}
}
$this->render('register',array('model'=>$model));
}*/
/*public function actionRegister() {
$model = new RegisterForm;
// if it is ajax validation request
if(isset($_POST['ajax']) && $_POST['ajax'] === 'register-form')
{
echo CActiveForm::validate($model);
app()->end();
}
}*/
public function actionSaveRedactorImg ($sub='main')
{
$this -> enableCsrfValidation = false;
if (Yii::$app->request->isPost) {
$dir = Yii::getAlias ('@images') .'/'.$sub.'/';
if (!file_exists($dir)){
FileHelper::createDirectory($dir);
}
$result_link = str_replace('admin.','',Url::home(true)).'uploads/images/'.$sub.'/';
$file = UploadedFile::getInstanceByName('file');
$model = new DynamicModel (compact ('file'));
$model ->addRule ('file', 'image')->validate();
if ($model->hasErrors()) {
$result = [
'error' => $model -> getFirstError ('file')
];
} else {
$model->file->name = strtotime('now').'_'.Yii::$app->getSecurity()->generateRandomString(6) . '.' . $model->file->extension;
if ($model->file->saveAs ($dir . $model->file->name)) {
$imag = Yii::$app->image->load($dir . $model->file->name);
$imag -> resize (800, NULL, Yii\image\drivers\Image::PRECISE)
->save($dir . $model->file->name, 85);
$result = [
'filelink' => $result_link . $model->file->name,'filename'=>$model->file->name];
} else {
$result = [
'error' => Yii::t ('vova07/imperavi', 'ERROR_CAN_NOT_UPLOAD_FILE')
];
}
}
Yii::$app->response->format = Response::FORMAT_JSON;
return $result;
} else {
throw new BadRequestHttpException ('Only Post is allowed');
}
}
public function actionSaveImg ()
{
$this -> enableCsrfValidation = false;
if (Yii::$app->request->isPost) {
$post = Yii::$app->request->post();
$dir = Yii::getAlias ('@images') .'/'.$post['ImageManager']['class'].'/';
if (!file_exists($dir)){
FileHelper::createDirectory($dir);
}
$result_link = str_replace('admin.','',Url::home(true)).'uploads/images/'.$post['class'].'/';
$file = UploadedFile::getInstanceByName('ImageManager[attachment]');
$model = new ImageManager();
$model->name = strtotime('now').'_'.Yii::$app->getSecurity()->generateRandomString(6) . '.' . $file->extension;
$model ->load($post);
$model->validate();
if ($model->hasErrors()) {
$result = [
'error' => $model -> getFirstError ('file')
];
} else {
if ($file->saveAs($dir . $model->name)) {
$imag = Yii::$app->image->load($dir . $model->name);
$imag -> resize (800, NULL, Yii\image\drivers\Image::PRECISE)
->save($dir . $model->name, 85);
$result = [
'filelink' => $result_link . $model->name,'filename'=>$model->name];
} else {
$result = [
'error' => 'ошибка'
];
}
$model->save();
}
Yii::$app->response->format = Response::FORMAT_JSON;
return $result;
} else {
throw new BadRequestHttpException ('Only Post is allowed');
}
}
}
<?php
/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model \common\models\RegistrForm */
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
$this->title = 'Регистрация';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-registr">
<h1><?= Html::encode($this->title) ?></h1>
<p>Пожалуйста, заполните следующие поля для регистрации.:</p>
<div class="row">
<div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'form-registr']); ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'email') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Регистрация', ['class' => 'btn btn-primary', 'name' => 'signup-button']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
</div>
какой конфиг?site\yii2\common\config\main.pgp Исключение, -это то, которое Вы предложили добавить :
'except' => ['login','error','register']
- и оно ничего не меняет. И обычно в админках нет регистрации. Пользователей добавляет админ.Во fronted также нет регистрации, и вкладка Signup не открывается.
в auth_assignment - ничего нетСейчас там есть только админ как в 'users', но другие пользователи пока не могут зарегистрироваться.
если надо закрыть доступ ко всей админке, то в ее конфиге можно поступить так:
<?php
return [
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'timeZone' => 'Europe/Moscow',
'components' => [
'cache' => [
'class' => 'yii\caching\FileCache',
/* 'robotEmail' => '',*/
/*'robotName' => 'Robot'*/
],
'image' => [
'class' => 'yii\image\ImageDriver',
'driver' => 'GD', //GD or Imagick
],
'authManager' => [
'class' => 'yii\rbac\DbManager',
'cache' => 'cache'
],
],
'on beforeAction' => function($event){ //цепляемся за событие перед запуском экшена
Yii::$app->controller->attachBehavior('',[ //цепляем к текущему контролеру поведение
'class' => \yii\filters\AccessControl::className(), //указываем класс поведения
'except' => ['login','error'], //исключим из правила экшены login и error, так как они должны быть доступны всем
'rules' => [
[
'allow' => true, //разрешаем доступ
'roles' => ['admin'], //'@' только зарегистрированным пользователям или замените на 'admin', что бы только админам позволить
],
],
]);
},
];