Решил по изучать Angular и за одно пощупать REST API Yii2. Клиент и сервер на одном домене. Решил оставить базовую авторизацию и не заморачиваться с токеном. Все запустилось, все работает, кроме AccessControl. Почему то выдает Unauthorized (#401) + выкидывает alert с формой авторизации.
Модель User базовая.
Контроллер
Код: Выделить всё
class AlbumsController extends \yii\rest\ActiveController
{
public $modelClass = 'frontend\models\Albums';
public function behaviors()
{
$behaviors['authenticator'] = [
'class' => HttpBasicAuth::className(),
'auth'=>function ($username, $password) {
return User::findOne([
'username' => $username,
'password_hash' => $password,
]);
},
];
$behaviors['access'] = [
'class' => AccessControl::className(),
'only' => ['index'],
'rules' => [
[
'allow' => true,
'actions' => ['index'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['view','update','delete'],
'roles' => ['@'],
],
],
];
return $behaviors;
}
}
Конфиг
Код: Выделить всё
return [
'id' => 'app-frontend',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'controllerNamespace' => 'frontend\controllers',
'components' => [
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'request' => [
'class' => '\yii\web\Request',
'enableCookieValidation' => false,
'parsers' => [
'application/json' => 'yii\web\JsonParser',
],
],
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'albums'],
'POST site/login' => 'site/login',
'POST site/logout' => 'site/logout',
],
]
],
'params' => $params,
];