| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | <?php/** * Created by PhpStorm. * User: nodelog * Date: 2020/6/20 * Time: 16:38 */namespace api\common\behaviors;use Yii;use yii\filters\auth\AuthMethod;use yii\web\UnauthorizedHttpException;class QueryParamAuth extends AuthMethod{    public $forceAuth = true;//是否强制验证,false则只登录,不关心是否成功    public $tokenParam = 'token';    /**     * @inheritdoc     */    public function authenticate($user, $request, $response)    {        $accessToken = $request->headers->get($this->tokenParam);        if (is_string($accessToken)) {            $identity = $user->loginByAccessToken($accessToken, get_class($this));            if ($identity !== null) {                return $identity;            }        }        if ($accessToken !== null && $this->forceAuth) {            $this->handleFailure($response);        }        return null;    }    /**     * @param $action     * @return bool     * @throws UnauthorizedHttpException     * @author nodelog     */    public function beforeAction($action)    {        $response = $this->response ? : Yii::$app->getResponse();        try {            $identity = $this->authenticate(                $this->user ? : Yii::$app->getUser(),                $this->request ? : Yii::$app->getRequest(),                $response            );        } catch (UnauthorizedHttpException $e) {            if ($this->isOptional($action) || !$this->forceAuth) {                return true;            }            throw $e;        }        if ($identity !== null || $this->isOptional($action) || !$this->forceAuth) {            return true;        } else {            $this->challenge($response);            $this->handleFailure($response);            return false;        }    }}
 |