mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-03 13:58:55 +08:00
Fixes #4920: yii\filters\auth\CompositeAuth should not trigger error as long as one of the methods succeeds
Fixes #3177: `yii\filters\auth\CompositeAuth` will send out challenges from all auth methods
This commit is contained in:
@ -88,6 +88,7 @@ Yii Framework 2 Change Log
|
|||||||
- Bug #4755: `yii\test\BaseActiveFixture::unload()` does not clean up the internal cached data (qiangxue)
|
- Bug #4755: `yii\test\BaseActiveFixture::unload()` does not clean up the internal cached data (qiangxue)
|
||||||
- Bug #4813: Fixed MSSQL schema that was getting incorrect info about constraints (samdark, SerjRamone, o-rey)
|
- Bug #4813: Fixed MSSQL schema that was getting incorrect info about constraints (samdark, SerjRamone, o-rey)
|
||||||
- Bug #4880: Return value of yii\web\Request::getPrefferedLanguage() was a normalized value instead of a valid language value from the input array (cebe)
|
- Bug #4880: Return value of yii\web\Request::getPrefferedLanguage() was a normalized value instead of a valid language value from the input array (cebe)
|
||||||
|
- Bug #4920: `yii\filters\auth\CompositeAuth` should not trigger error as long as one of the methods succeeds (qiangxue)
|
||||||
- Bug: Fixed inconsistent return of `\yii\console\Application::runAction()` (samdark)
|
- Bug: Fixed inconsistent return of `\yii\console\Application::runAction()` (samdark)
|
||||||
- Bug: URL encoding for the route parameter added to `\yii\web\UrlManager` (klimov-paul)
|
- Bug: URL encoding for the route parameter added to `\yii\web\UrlManager` (klimov-paul)
|
||||||
- Bug: Fixed the bug that requesting protected or private action methods would cause 500 error instead of 404 (qiangxue)
|
- Bug: Fixed the bug that requesting protected or private action methods would cause 500 error instead of 404 (qiangxue)
|
||||||
@ -113,6 +114,7 @@ Yii Framework 2 Change Log
|
|||||||
- Enh #3108: Added `yii\debug\Module::enableDebugLogs` to disable logging debug logs by default (qiangxue)
|
- Enh #3108: Added `yii\debug\Module::enableDebugLogs` to disable logging debug logs by default (qiangxue)
|
||||||
- Enh #3132: `yii\rbac\PhpManager` now supports more compact data file format (qiangxue)
|
- Enh #3132: `yii\rbac\PhpManager` now supports more compact data file format (qiangxue)
|
||||||
- Enh #3154: Added validation error display for `GridView` filters (ivan-kolmychek)
|
- Enh #3154: Added validation error display for `GridView` filters (ivan-kolmychek)
|
||||||
|
- Enh #3177: `yii\filters\auth\CompositeAuth` will send out challenges from all auth methods (qiangxue)
|
||||||
- Enh #3196: Masked input upgraded to use jquery.inputmask plugin with more features. (kartik-v)
|
- Enh #3196: Masked input upgraded to use jquery.inputmask plugin with more features. (kartik-v)
|
||||||
- Enh #3220: Added support for setting transaction isolation levels (cebe)
|
- Enh #3220: Added support for setting transaction isolation levels (cebe)
|
||||||
- Enh #3221: Added events for DB transaction commit/rollback (drcypher, qiangxue)
|
- Enh #3221: Added events for DB transaction commit/rollback (drcypher, qiangxue)
|
||||||
|
|||||||
@ -23,7 +23,6 @@ interface AuthInterface
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Authenticates the current user.
|
* Authenticates the current user.
|
||||||
*
|
|
||||||
* @param User $user
|
* @param User $user
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @param Response $response
|
* @param Response $response
|
||||||
@ -31,6 +30,12 @@ interface AuthInterface
|
|||||||
* @throws UnauthorizedHttpException if authentication information is provided but is invalid.
|
* @throws UnauthorizedHttpException if authentication information is provided but is invalid.
|
||||||
*/
|
*/
|
||||||
public function authenticate($user, $request, $response);
|
public function authenticate($user, $request, $response);
|
||||||
|
/**
|
||||||
|
* Generates challenges upon authentication failure.
|
||||||
|
* For example, some appropriate HTTP headers may be generated.
|
||||||
|
* @param Response $response
|
||||||
|
*/
|
||||||
|
public function challenge($response);
|
||||||
/**
|
/**
|
||||||
* Handles authentication failure.
|
* Handles authentication failure.
|
||||||
* The implementation should normally throw UnauthorizedHttpException to indicate authentication failure.
|
* The implementation should normally throw UnauthorizedHttpException to indicate authentication failure.
|
||||||
|
|||||||
@ -41,20 +41,30 @@ abstract class AuthMethod extends ActionFilter implements AuthInterface
|
|||||||
*/
|
*/
|
||||||
public function beforeAction($action)
|
public function beforeAction($action)
|
||||||
{
|
{
|
||||||
|
$response = $this->response ? : Yii::$app->getResponse();
|
||||||
|
|
||||||
$identity = $this->authenticate(
|
$identity = $this->authenticate(
|
||||||
$this->user ? : Yii::$app->getUser(),
|
$this->user ? : Yii::$app->getUser(),
|
||||||
$this->request ? : Yii::$app->getRequest(),
|
$this->request ? : Yii::$app->getRequest(),
|
||||||
$this->response ? : Yii::$app->getResponse()
|
$response
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($identity !== null) {
|
if ($identity !== null) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
$this->handleFailure($this->response ? : Yii::$app->getResponse());
|
$this->challenge($response);
|
||||||
|
$this->handleFailure($response);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritdoc
|
||||||
|
*/
|
||||||
|
public function challenge($response)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -74,12 +74,17 @@ class CompositeAuth extends AuthMethod
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($this->authMethods)) {
|
|
||||||
/* @var $auth AuthInterface */
|
|
||||||
$auth = reset($this->authMethods);
|
|
||||||
$auth->handleFailure($response);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritdoc
|
||||||
|
*/
|
||||||
|
public function challenge($response)
|
||||||
|
{
|
||||||
|
foreach ($this->authMethods as $method) {
|
||||||
|
/** @var $method AuthInterface */
|
||||||
|
$method->challenge($response);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,9 +7,6 @@
|
|||||||
|
|
||||||
namespace yii\filters\auth;
|
namespace yii\filters\auth;
|
||||||
|
|
||||||
use Yii;
|
|
||||||
use yii\web\UnauthorizedHttpException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HttpBasicAuth is an action filter that supports the HTTP Basic authentication method.
|
* HttpBasicAuth is an action filter that supports the HTTP Basic authentication method.
|
||||||
*
|
*
|
||||||
@ -90,9 +87,8 @@ class HttpBasicAuth extends AuthMethod
|
|||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function handleFailure($response)
|
public function challenge($response)
|
||||||
{
|
{
|
||||||
$response->getHeaders()->set('WWW-Authenticate', "Basic realm=\"{$this->realm}\"");
|
$response->getHeaders()->set('WWW-Authenticate', "Basic realm=\"{$this->realm}\"");
|
||||||
throw new UnauthorizedHttpException('You are requesting with an invalid access token.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,9 +7,6 @@
|
|||||||
|
|
||||||
namespace yii\filters\auth;
|
namespace yii\filters\auth;
|
||||||
|
|
||||||
use Yii;
|
|
||||||
use yii\web\UnauthorizedHttpException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HttpBearerAuth is an action filter that supports the authentication method based on HTTP Bearer token.
|
* HttpBearerAuth is an action filter that supports the authentication method based on HTTP Bearer token.
|
||||||
*
|
*
|
||||||
@ -57,9 +54,8 @@ class HttpBearerAuth extends AuthMethod
|
|||||||
/**
|
/**
|
||||||
* @inheritdoc
|
* @inheritdoc
|
||||||
*/
|
*/
|
||||||
public function handleFailure($response)
|
public function challenge($response)
|
||||||
{
|
{
|
||||||
$response->getHeaders()->set('WWW-Authenticate', "Bearer realm=\"{$this->realm}\"");
|
$response->getHeaders()->set('WWW-Authenticate', "Bearer realm=\"{$this->realm}\"");
|
||||||
throw new UnauthorizedHttpException('You are requesting with an invalid access token.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,9 +7,6 @@
|
|||||||
|
|
||||||
namespace yii\filters\auth;
|
namespace yii\filters\auth;
|
||||||
|
|
||||||
use Yii;
|
|
||||||
use yii\web\UnauthorizedHttpException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* QueryParamAuth is an action filter that supports the authentication based on the access token passed through a query parameter.
|
* QueryParamAuth is an action filter that supports the authentication based on the access token passed through a query parameter.
|
||||||
*
|
*
|
||||||
@ -42,12 +39,4 @@ class QueryParamAuth extends AuthMethod
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
public function handleFailure($response)
|
|
||||||
{
|
|
||||||
throw new UnauthorizedHttpException(Yii::t('yii', 'You are requesting with an invalid access token.'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user