@hollanditkzn

Как мне статичный токен сдеть не из бд по api?

Мне нужно и другого сайта, чтобы брал данные польователя по api и все, не создание записи, не редактирование и прочее. То есть мне нужен статичный токен создать и все для данного сайта, чтобы левые запросы не могли брать данные с этого сайта.
Как я понял мне нужен findIdentityByAccessToken может конечно я могу ошибаться
Но выходит что я в браузере или postman делаю запрос хоть secret_token или другой, то я все равно получаю ответ.
Моя реализация
Контроллер
class UserController extends ActiveController
{
    public $modelClass = 'backend\models\User';
}

Модель
class User extends ActiveRecord implements IdentityInterface
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%user}}';
    }

    public function actions()
    {
        $actions = parent::actions();

        unset($actions['delete'], $actions['create'], $actions['update']);
    }

    public function fields()
    {
        return [
            'name' => function(){
                return $this->last_name.' '.$this->name.' '.$this->patronymic;
            },
            'position' => function(){
                return $this->position->name;
            },
            'phone'
        ];
    }
public static function findIdentityByAccessToken($token, $type = null)
    {
// Вот тут я вообще не пойму как указывать тот токен, который мне нужен
        return 'secret_token' == $token;
    }
}

Или мне нужен другой метод, как понимаю это при когда залогинировался пользователь или нет?
Например
QueryParams
class UserController extends ActiveController
{
    const API_KEY = 'secret';

    public $modelClass = 'backend\models\User';
    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['authenticator']['class'] = QueryParamAuth::className();
        $behaviors['authenticator']['tokenParam'] = 'token';
        return [
            'access' => [
                'class' => AccessControl::className(),
                'user' => false,
                'rules' => [
                    [
                        'allow' => true,
                        'matchCallback' => function ($rule, $action){
                            $data = \Yii::$app->getRequest()->getBodyParams();
                            return isset($data['token']) === self::API_KEY;
                        },
                    ],
                ],
            ],
        ];
    }
}
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@hollanditkzn Автор вопроса
class UserController extends ActiveController
{
    const TOKEN = 'secret';

    public $modelClass = 'backend\models\User';
    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['authenticator']['class'] = QueryParamAuth::className();
        $behaviors['authenticator']['tokenParam'] = 'token';
        return ArrayHelper::merge(parent::behaviors(), [
                'access' => [
                    'class' => AccessControl::className(),
                    'user' => false,
                    'rules' => [
                        [
                            'allow' => true,
                            'matchCallback' => function ($rule, $action) {
                                $data = \Yii::$app->request->get('token');
                                return $data === self::TOKEN;
                            },
                        ],
                    ],
                    'denyCallback' => function ($rule, $action) {
                        throw new \yii\web\ForbiddenHttpException('Доступ запрещен');
                    }
                ],
            ]
        );
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы