Я работаю над приложением appengine, используя webapp2. Я основывал свою аутентификацию на идеях, изложенных в эту статью.
Я добавил возможность удалять учетную запись (это требование приложения), и у меня возникла проблема с сессиями. Если пользователь вошел в систему из более чем одного места, для этого пользователя будет два токена аутентификации. Когда учетная запись удаляется из одного из этих логинов, сеанс для этого логина уничтожается. Однако другой логин будет иметь токен аутентификации в хранилище данных.
Я изменил декоратор/функцию user_required
/check_login
, чтобы он сначала искал пользователя в сеансе. Если он не находит его, я сообщаю клиенту, что ему нужно войти в систему. Если он находит его, я получаю пользователя из хранилища данных. Если это None, то я предполагаю, что было несколько входов в систему, и другой удалил учетную запись (которая также удаляет пользователя). Поэтому я убиваю сеанс и говорю клиенту, что Пользователь больше не существует. В противном случае я проверяю, проверен ли пользователь, и если нет, я говорю клиенту, что пользователь должен быть проверен, прежде чем он сможет что-либо сделать.
Я предпочел бы убить все сеансы для пользователя, если учетная запись удалена. Есть какой-либо способ сделать это? Я также хотел бы эту функциональность, чтобы у меня была функция, с помощью которой вошедший в систему пользователь может видеть все сеансы для этого пользователя и убивать/отменять их по своему желанию (вроде того, что Facebook и Google, и я уверен, что много других услуг) предложение.
РЕДАКТИРОВАТЬ: Несмотря на то, что в какой-то момент я, вероятно, в конечном итоге получу пользователя из хранилища данных, и когда я вызываю self.user
, это webapp2.cached_property
, я все равно предпочел бы не иметь чтобы пользователь в начале каждого запроса был украшен user_required
, если мне, возможно, удастся обойтись только извлечением информации из сеанса.