Skip to content

Commit 2ee9d43

Browse files
committed
Refactor user/login
Add handling for `OPTION` Add post,options verbs to controller instead `UrlManager::rules` Add validate to `$model user` when $_POST is empty
1 parent 0326bc1 commit 2ee9d43

File tree

2 files changed

+110
-97
lines changed

2 files changed

+110
-97
lines changed

rest/config/main.php

Lines changed: 56 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,56 @@
1-
<?php
2-
3-
$params = array_merge(
4-
require(__DIR__ . '/../../common/config/params.php'),
5-
require(__DIR__ . '/../../common/config/params-local.php'),
6-
require(__DIR__ . '/params.php'),
7-
require(__DIR__ . '/params-local.php')
8-
);
9-
10-
return [
11-
'id' => 'rest-api',
12-
'basePath' => dirname(__DIR__),
13-
'bootstrap' => ['log'],
14-
'modules' => [
15-
'v1' => [
16-
'class' => 'rest\versions\v1\RestModule'
17-
],
18-
'v2' => [
19-
'basePath' => '@rest/modules/v2',
20-
'controllerNamespace' => 'v2\controllers',
21-
],
22-
],
23-
'components' => [
24-
'user' => [
25-
'identityClass' => 'common\models\User',
26-
'enableSession' => false,
27-
],
28-
'log' => [
29-
'targets' => [
30-
[
31-
'class' => 'yii\log\FileTarget',
32-
'levels' => ['error', 'warning'],
33-
],
34-
],
35-
],
36-
'request' => [
37-
'class' => '\yii\web\Request',
38-
'enableCookieValidation' => false,
39-
'parsers' => [
40-
'application/json' => 'yii\web\JsonParser',
41-
],
42-
],
43-
'urlManager' => [
44-
'enablePrettyUrl' => true,
45-
'enableStrictParsing' => true,
46-
'showScriptName' => false,
47-
'rules' => [
48-
['class' => 'yii\rest\UrlRule', 'controller' => ['v1/post', 'v1/comment', 'v2/post']],
49-
'OPTIONS v1/user/login' => 'v1/user/login',
50-
'POST v1/user/login' => 'v1/user/login',
51-
'POST v2/user/login' => 'v2/user/login',
52-
'OPTIONS v2/user/login' => 'v2/user/login',
53-
],
54-
],
55-
],
56-
'params' => $params,
57-
];
1+
<?php
2+
3+
$params = array_merge(
4+
require(__DIR__ . '/../../common/config/params.php'),
5+
require(__DIR__ . '/../../common/config/params-local.php'),
6+
require(__DIR__ . '/params.php'),
7+
require(__DIR__ . '/params-local.php')
8+
);
9+
10+
return [
11+
'id' => 'rest-api',
12+
'basePath' => dirname(__DIR__),
13+
'bootstrap' => ['log'],
14+
'modules' => [
15+
'v1' => [
16+
'class' => 'rest\versions\v1\RestModule'
17+
],
18+
'v2' => [
19+
'basePath' => '@rest/modules/v2',
20+
'controllerNamespace' => 'v2\controllers',
21+
],
22+
],
23+
'components' => [
24+
'user' => [
25+
'identityClass' => 'common\models\User',
26+
'enableSession' => false,
27+
],
28+
'log' => [
29+
'targets' => [
30+
[
31+
'class' => 'yii\log\FileTarget',
32+
'levels' => ['error', 'warning'],
33+
],
34+
],
35+
],
36+
'request' => [
37+
'class' => '\yii\web\Request',
38+
'enableCookieValidation' => false,
39+
'parsers' => [
40+
'application/json' => 'yii\web\JsonParser',
41+
],
42+
],
43+
'urlManager' => [
44+
'enablePrettyUrl' => true,
45+
'enableStrictParsing' => true,
46+
'showScriptName' => false,
47+
'rules' => [
48+
['class' => 'yii\rest\UrlRule', 'controller' => ['v1/post', 'v1/comment', 'v2/post']],
49+
'v1/user/login' => 'v1/user/login',
50+
'POST v2/user/login' => 'v2/user/login',
51+
'OPTIONS v2/user/login' => 'v2/user/login',
52+
],
53+
],
54+
],
55+
'params' => $params,
56+
];
Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,54 @@
1-
<?php
2-
namespace rest\versions\v1\controllers;
3-
4-
use common\models\LoginForm;
5-
use yii\filters\RateLimiter;
6-
use yii\rest\ActiveController;
7-
8-
class UserController extends ActiveController
9-
{
10-
public $modelClass = 'rest\versions\v1\models\User';
11-
12-
public function behaviors()
13-
{
14-
$behaviors = parent::behaviors();
15-
$behaviors['rateLimiter'] = [
16-
'class' => RateLimiter::className(),
17-
'enableRateLimitHeaders' => false,
18-
];
19-
return $behaviors;
20-
}
21-
22-
public function actionLogin()
23-
{
24-
$model = new LoginForm();
25-
26-
if ($model->load(\Yii::$app->getRequest()->getBodyParams(), '') && $model->login()) {
27-
echo \Yii::$app->user->identity->getAuthKey();
28-
} else {
29-
return $model;
30-
}
31-
}
32-
33-
public function actionIndex()
34-
{
35-
if (\Yii::$app->user->isGuest) {
36-
throw new \HttpHeaderException();
37-
}
38-
return \Yii::$app->user->getId();
39-
}
40-
}
1+
<?php
2+
namespace rest\versions\v1\controllers;
3+
4+
use common\models\LoginForm;
5+
use yii\filters\RateLimiter;
6+
use yii\rest\ActiveController;
7+
8+
class UserController extends ActiveController
9+
{
10+
public $modelClass = 'rest\versions\v1\models\User';
11+
12+
public function behaviors()
13+
{
14+
$behaviors = parent::behaviors();
15+
16+
$behaviors['rateLimiter'] = [
17+
'class' => RateLimiter::className(),
18+
'enableRateLimitHeaders' => false,
19+
];
20+
21+
$behaviors['verbs'] = [
22+
'class' => \yii\filters\VerbFilter::className(),
23+
'actions' => [
24+
'login' => ['POST', 'OPTIONS'],
25+
],
26+
];
27+
28+
return $behaviors;
29+
}
30+
31+
public function actionLogin()
32+
{
33+
if (\Yii::$app->getRequest()->getMethod() === 'OPTIONS') {
34+
\Yii::$app->getResponse()->getHeaders()->set('Allow', 'POST');
35+
} else {
36+
$model = new LoginForm();
37+
38+
if ($model->load(\Yii::$app->getRequest()->getBodyParams(), '') && $model->login()) {
39+
echo \Yii::$app->user->identity->getAuthKey();
40+
} else {
41+
$model->validate();
42+
return $model;
43+
}
44+
}
45+
}
46+
47+
public function actionIndex()
48+
{
49+
if (\Yii::$app->user->isGuest) {
50+
throw new \HttpHeaderException();
51+
}
52+
return \Yii::$app->user->getId();
53+
}
54+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy