Отображение компонентов ReactJS на основе аутентификации

У меня есть внешнее приложение ReactJS, смешанное с внутренним приложением Laravel.

Столкнулся с проблемой авторизации. Я аутентифицирую пользователя с помощью аутентификации Laravel, но у меня возникают проблемы с отображением компонентов. У меня есть несколько сообщений (/posts/1 или /posts/2 и т. д.), и когда пользователь посещает страницу, он может изменить сообщение, если он является автором.

Я сохраняю в качестве состояния идентификатор пользователя и проверяю так:

if(this.props.user.id === this.props.posts.id_user) ...

Но это действительно небезопасно, так как состояние может быть изменено любым с помощью инструмента разработчика. Изменяя состояние, пользователь может изменить сообщение, даже если он не является автором, потому что все отображаемые компоненты, управляющие редактированием, будут ему доступны.

Есть ли «волшебный» трюк, чтобы предотвратить это?


person Zeyukan Ich'    schedule 26.02.2019    source источник
comment
К сожалению, в этом нет никакой магии. Вы должны убедиться в том, что пользователь, пытающийся изменить какой-либо ресурс, имеет на это право.   -  person Tholle    schedule 26.02.2019
comment
Таким образом, он может изменить отображение по своему усмотрению, просто изменив состояние, но мне все же нужно проверить серверную часть, верно?   -  person Zeyukan Ich'    schedule 26.02.2019
comment
Да все верно. Это не проблема, если пользователь испортит свои собственные данные в браузере, но вам нужно защищаться от пользователей, изменяющих ресурсы, на которые у них нет разрешения, в бэкэнде.   -  person Tholle    schedule 26.02.2019
comment
Я проверю это тогда, спасибо, это действительно помогло мне!   -  person Zeyukan Ich'    schedule 26.02.2019


Ответы (1)


Прежде всего, state, о котором вы говорите, - это app state, тот, который находится в браузере, если пользователь изменит это состояние, эффекты будут затронуты только самим пользователем, в его браузере, теоретически, не меняется data или state в вашем бэкэнде/базе данных, если только вы не реализуете ту же проверку, о которой говорите.

Если вы делаете if(this.props.user.id === this.props.posts.id_user) спереди, вы обязательно должны сделать это сзади, это место, где имеет значение реальная проверка, именно здесь пользователь не может изменить идентификатор пользователя, потому что, например, вы будете использовать один в сеансе пользователя, который хранится в файлах cookie или на сервере Redis.

Всегда проверяйте в бэкэнде

person Sergio Flores    schedule 26.02.2019