#javascript #angularjs #symfony
#javascript #angularjs #symfony
Вопрос:
Привет, у меня вопрос о хранении цен в мобильных / угловых приложениях, подключающихся к некоторому API с помощью аутентификации на основе токенов. В примере интерфейс Angular подключается к API Symfony2 с помощью Oauth2. В стандартном веб-приложении, когда я добавляю что-то в корзину, цена сохраняется в данных сеанса на стороне сервера, поэтому, когда я продолжу оформлять заказ, а тем временем цена изменится, я куплю по той цене, которую я добавил в корзину. Так что насчет Angular или мобильных приложений, которые подключаются на основе токенов и не имеют никакой информации на стороне сервера? Хранение цен в локальной структуре кажется мне плохим?
Комментарии:
1. Если вы можете сохранить что-то вроде идентификатора для товара и получить его при оформлении заказа, это было бы хорошо.
2. Да, но мой вопрос в том, что, когда цена меняется, рекомендуется продавать по цене, по которой пользователь добавляет что-то в корзину, а не по цене
Ответ №1:
1) В общем, вы не хотите хранить что-либо на стороне клиента, что связано с управлением транзакцией на основе сервера (например, ценой), в противном случае кто-то может перепроектировать ваш продукт и начать покупать товары за «удачно сохраненный» 1 доллар США.
2) Что мешает вам использовать в своем мобильном приложении тот же механизм, что и в стандартном веб-приложении.
Комментарии:
1. Я задаю вопрос, потому что я хочу создать API в клиентском приложении Symfony и Angular, клиентское приложение, к которому я хочу иметь возможность подключаться с помощью Oauth2, но у меня нет сеанса на стороне сервера (только токен доступа, подключенный к пользователю в базе данных), поэтому я не могу сделать это стандартным способом, я думаю.
2. Ну ладно. Я понимаю. в этом случае вам необходимо хранить не только информацию о пользователе с помощью этого токена доступа, но и «информацию о сеансе». По сути, используя различные API на вашем сервере с заданным токеном доступа, вы должны иметь возможность доступа к данным в правильном состоянии. Например, как только вы выбираете продукт для покупки, его информация сохраняется в базе данных как зарезервированный продукт для данного токена доступа. Позже вы сможете найти эту информацию при фиксации транзакции.
3. Да, я думаю об этом, но мне интересно, есть ли какие-то лучшие решения, это то, что вы написали, конечно, хорошо, но мне нужно хранить информацию, и я думаю, что можно удалять старые сеансы, когда пользователь закрывает приложение или что-то в этом роде. Мне было любопытно, как это можно управлять другими способами. Но если других решений нет, спасибо за консультации 🙂
4. Для удаления старых сеансов вам необходимо выполнить следующее: 1) разрешить пользователю выйти из системы (и удалить данные при выходе из системы). 2) удалите сеансы, для которых токены истекли. 3) как только тот же пользователь снова войдет в систему, удалите старые сеансы. В качестве бонуса, если ваше приложение хранит ключ сеанса локально, пользователь может продолжить старый сеанс, даже если страница перезагружается.