Size: a a a

2020 August 22

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Прокатит, в CsrfInjection добавляешь private ServerRequestInterface $request; и метод withRequest
Но реквест есть только в матчере или контроллере. На уровне конфига я не смогу сделать withRequest
источник

DS

Dmitriy S in Yii Framework 3
источник

DS

Dmitriy S in Yii Framework 3
Вот так вот в рендерере
источник

СП

Сергей Предводителев... in Yii Framework 3
про вариант с withCsrf - понятно.

Не понятно, когда я инъекцию подключу глобально в конфиги
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Но реквест есть только в матчере или контроллере. На уровне конфига я не смогу сделать withRequest
Ну так в котроллере и вызываешь
return $this->viewRenderer->withCsrf($request)->render(...)
источник

СП

Сергей Предводителев... in Yii Framework 3
ща покажу
источник

СП

Сергей Предводителев... in Yii Framework 3
в web.php сейчас когда с роутером я могу вот так сделать
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
в web.php сейчас когда с роутером я могу вот так сделать
А зачем csrf нужен глобально?
источник

СП

Сергей Предводителев... in Yii Framework 3
Допустим там какие-нибудь формы на JS везде и тянут токен из  мета-тега
источник

СП

Сергей Предводителев... in Yii Framework 3
Ну и изначально инъекция должна работать при установке глобально.
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Ну и изначально инъекция должна работать при установке глобально.
Ну тогда через CsrfToken
источник

DS

Dmitriy S in Yii Framework 3
Но оставить возможность и через атрибут
источник

СП

Сергей Предводителев... in Yii Framework 3
Ввести ограничение через документацию?
Что CsrfToken должен быть синглтоном в контейнере?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Ввести ограничение через документацию?
Что CsrfToken должен быть синглтоном в контейнере?
Нет, как я выше писал, добавить интерфейс и не биндить его по умолчанию. Биндить можно во yii-view, ему собственно и нужна эта фича
источник

DS

Dmitriy S in Yii Framework 3
Dmitriy S
Ну, он говорит, что не везде это будет работать. Можно сделать CsrfTokenInterface,  в конструкторе
CsrfTokenInterface $csrfToken = null
ну и соответственно проверяем, если не установлен, то пишем токен в атрибут риквеста, а если установлен, то пишем в $csrfToken. То есть, для yii оно будет работать через CsrfToken, если в контейнере сконфижить интерфейс
CsrfTokenInterface::class  => CsrfToken::class
вот
источник

СП

Сергей Предводителев... in Yii Framework 3
Да, понял. Но как-то не явно это всё для отдельного пакета :(
Хоть и в Yii будет удобно.
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Да, понял. Но как-то не явно это всё для отдельного пакета :(
Хоть и в Yii будет удобно.
Та все явно, хочешь хранить во внешнем хранилище, передай его в конструктор, если не передашь, то будем писать в атрибут риквеста. Все предельно ясно)
источник

СП

Сергей Предводителев... in Yii Framework 3
Вообще разное поведение в зависимости от того есть ли в контейнере какая-то реализация или нет, разве это норм?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Вообще разное поведение в зависимости от того есть ли в контейнере какая-то реализация или нет, разве это норм?
Даже по фреймворку таких кейсов хватает с дефолтным null
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Та все явно, хочешь хранить во внешнем хранилище, передай его в конструктор, если не передашь, то будем писать в атрибут риквеста. Все предельно ясно)
Было бы норм если бы можно было сделать реализацию CsrfToken, который бы сохранял и получал из реквеста
источник