Я пишу REST API на yii2 в postman'e все работает хорошо а вот если делать запросы с fronta то выходят проблемы.
Вот мой config
<?php
$params = require(__DIR__ . '/params.php');
$db = require(__DIR__ . '/db.php');
return [
'id' => 'micro-app',
// the basePath of the application will be the `micro-app` directory
'basePath' => dirname(__DIR__),
'modules' => [
'v1' => [
'class' => 'app\modules\v1\v1',
],
],
// this is where the application will find all controllers
'controllerNamespace' => 'app\controllers',
// set an alias to enable autoloading of classes from the 'micro' namespace
'aliases' => [
'@app' => __DIR__.'/../',
],
'components' => [
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<alias:\w+>' => 'site/<alias>',
],
],
'user' => [
'identityClass' => 'app\models\UserIdentity',
'enableAutoLogin' => false,
'enableSession' => false,
'loginUrl' => null,
],
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
],
'enableCsrfCookie' => false,
],
'db' => $db,
],
'params' => $params,
];
Мой котроллер
<?php
namespace app\controllers;
use app\models\Note;
use app\models\User;
use app\models\Status;
use Yii;
use yii\rest\Controller;
use yii\web\ErrorAction;
class SiteController extends Controller
{
public function beforeAction($action){
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
public function behaviors(){
$behaviors = parent::behaviors();
$behaviors['corsFilter'] = [
'class' => \yii\filters\Cors::class,
'cors' => [
'Origin' => ['*'],
'Access-Control-Request-Method' => ['POST', 'PUT', 'OPTIONS', 'GET', 'DELETE'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Headers' => ['Content-Type'],
'Access-Control-Max-Age' => 3600,
'Access-Control-Expose-Headers' => ['*'],
],
];
unset($behaviors['authenticator']);
$behaviors['authenticator'] = [
'class' => \yii\filters\auth\HttpBearerAuth::class,
];
$behaviors['access'] = [
'class' => \yii\filters\AccessControl::class,
'rules' => [
[
'allow' => true,
'roles' => ['@'],
],
],
];
return $behaviors;
}
protected function verbs()
{
return [
'signup' => ['POST'],
'login' => ['POST'],
];
}
public function actionIndex()
{
$note = Note::find()->all();
return [
'status' => Status::STATUS_OK,
'message' => 'OK',
'data' => $note
];
}
public function actionView($id)
{
$note = Note::findOne($id);
return [
'status' => Status::STATUS_FOUND,
'message' => 'Data Found',
'data' => $note
];
}
public function actionSignup()
{
$model = new User();
$params = Yii::$app->request->post();
if(!$params) {
Yii::$app->response->statusCode = Status::STATUS_BAD_REQUEST;
return [
'status' => Status::STATUS_BAD_REQUEST,
'message' => "Need username, password, and email.",
'data' => ''
];
}
$model->username = $params['username'];
$model->email = $params['email'];
$model->setPassword($params['password']);
$model->generateAuthKey();
$model->status = User::STATUS_ACTIVE;
if ($model->save()) {
Yii::$app->response->statusCode = Status::STATUS_CREATED;
$response['isSuccess'] = 201;
$response['message'] = 'You are now a member!';
$response['user'] = \app\models\User::findByUsername($model->username);
return [
'status' => Status::STATUS_CREATED,
'message' => 'You are now a member',
'data' => User::findByUsername($model->username),
];
} else {
Yii::$app->response->statusCode = Status::STATUS_BAD_REQUEST;
$model->getErrors();
$response['hasErrors'] = $model->hasErrors();
$response['errors'] = $model->getErrors();
return [
'status' => Status::STATUS_BAD_REQUEST,
'message' => 'Error saving data!',
'data' => [
'hasErrors' => $model->hasErrors(),
'getErrors' => $model->getErrors(),
]
];
}
}
public function actionLogin()
{
$params = Yii::$app->request->post();
if(empty($params['username']) || empty($params['password'])) return [
'status' => Status::STATUS_BAD_REQUEST,
'message' => "Need username and password.",
'data' => ''
];
$user = User::findByUsername($params['username']);
if ($user->validatePassword($params['password'])) {
if(isset($params['consumer'])) $user->consumer = $params['consumer'];
if(isset($params['access_given'])) $user->access_given = $params['access_given'];
Yii::$app->response->statusCode = Status::STATUS_FOUND;
$user->generateAuthKey();
$user->save();
return [
'status' => Status::STATUS_FOUND,
'message' => 'Login Succeed, save your token',
'data' => [
'id' => $user->username,
'token' => $user->auth_key,
'email' => $user['email'],
]
];
} else {
Yii::$app->response->statusCode = Status::STATUS_UNAUTHORIZED;
return [
'status' => Status::STATUS_UNAUTHORIZED,
'message' => 'Username and Password not found. Check Again!',
'data' => ''
];
}
}
}